设计模式

1.装饰者模式
| |
| |
| let a = ()=>{ |
| console.log('a'); |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| let newa = ()=>{ |
| a(); |
| console.log('b'); |
| } |
| |
| |
| |
| function Plane() { |
| |
| } |
| Plane.prototype.fire = function () { |
| console.log('普通子弹'); |
| } |
| |
| function MissileDecorator(plane) { |
| this.plane = plane; |
| } |
| |
| MissileDecorator.prototype.fire = function () { |
| this.plane.fire(); |
| console.log('导弹'); |
| } |
| |
| function AtomDecorator(plane) { |
| this.plane = plane; |
| } |
| |
| AtomDecorator.prototype.fire = function () { |
| this.plane.fire(); |
| console.log('原子弹'); |
| } |
| |
| let plane = new Plane(); |
| plane = new MissileDecorator(plane); |
| plane = new AtomDecorator(plane) |
| plane.fire(); |
| |
| |
| |
| |
| |
| |
| |
| |
2. 策略模式
| |
| |
| |
| |
| let strategys = { |
| s(base){ |
| console.log('女朋友'); |
| console.log('iphone'); |
| return base*5; |
| }, |
| a(base){ |
| console.log('书包'); |
| return base*4; |
| }, |
| b(base){ |
| return base*3; |
| }, |
| c(base){ |
| return base*2; |
| }, |
| d(base){ |
| return base; |
| }, |
| e(base){ |
| return 0; |
| } |
| } |
| |
| function catulateBonus(base,grade){ |
| return strategys[grade](base) |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
3. 代理模式
| |
| |
| |
| |
| function Flower(owner,name) { |
| this.owner = owner; |
| this.name = name; |
| } |
| |
| let liangShanbo = { |
| sendFlower(target){ |
| let flower = new Flower('liangShanbo','rose'); |
| target.receiveFlower(flower); |
| } |
| } |
| |
| let matchMaker = { |
| receiveFlower(flower){ |
| zhuYingTai.receiveFlower(flower) |
| } |
| } |
| |
| let zhuYingTai = { |
| receiveFlower(flower){ |
| console.log(`zhuYingTai receive ${flower.name} from ${flower.owner}`); |
| } |
| } |
| |
| |
| liangShanbo.sendFlower(matchMaker); |
| |
4. 发布订阅模式
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>发布订阅模式</title> |
| </head> |
| <body> |
| |
| |
| |
| |
| |
| |
| <script> |
| |
| document.addEventListener('click',(event)=>{ |
| console.log(event); |
| }) |
| </script> |
| </body> |
| </html> |
5.迭代器模式
| |
| |
| const array = [1,2,3,4,5]; |
| |
| |
| |
| |
| |
| |
| |
| |
| let reverseEach = function (obj,callback) { |
| if(!Array.isArray(obj)){ |
| throw Error('params is must an array!') |
| } |
| for (let i = obj.length-1; i>=0; i--) { |
| callback.call(obj[i],obj[i],i) |
| } |
| } |
| |
| reverseEach(array,(item,index)=>{ |
| console.log(`item:${item}`); |
| console.log(`index:${index}`); |
| }) |
| |
| |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!