《javascript设计模式与开发实践》阅读笔记(10)—— 组合模式
来源:互联网 发布:淘宝店招两边怎么设置 编辑:程序博客网 时间:2024/05/16 11:28
组合模式:一些子对象组成一个父对象,子对象本身也可能是由一些孙对象组成。
有点类似树形结构的意思,这里举一个包含命令模式的例子
1 var list=function(){ //创建接口对象的函数 2 return { 3 arr:[], //执行列表 用来存储需要执行的对象 4 add:function(obj){ //往执行列表里添加对象 5 this.arr.push(obj); 6 }, 7 execute:function(){ //遍历执行列表,每个对象执行规定好的接口方法 8 for(var i=0,l=this.arr.length;i<l;i++){ 9 this.arr[i].execute();10 }11 }12 }13 };14 15 var menubar={ //一系列对象,每个对象都有一个相同的接口,便于同时调用16 execute:function(){17 console.log("刷新menubar")18 }19 }20 21 var headbar={22 execute:function(){23 console.log("刷新headbar")24 }25 }26 27 var footbar={28 execute:function(){29 console.log("刷新footbar")30 }31 }32 33 var move={34 execute:function(){35 console.log("加入动画")36 }37 }38 39 var picA={40 execute:function(){41 console.log("移除picA")42 }43 }44 45 var picB={46 execute:function(){47 console.log("移除picB")48 }49 }50 51 52 var refresh=list(); //负责刷新的接口对象53 refresh.add( menubar ); //添加需要刷新的对象54 refresh.add( headbar );55 refresh.add( footbar );56 57 58 var remove=list(); //负责移除的接口对象59 remove.add( picA ); //需要移除的对象60 remove.add( picB );61 62 var start=list(); //负责所有事情的接口对象63 start.add( refresh ); //添加负责刷新的组合对象64 start.add( move ); //添加负责动画的对象65 start.add( remove ); //添加负责移除的组合对象66 67 start.execute(); //执行这个组合对象68 69 /****执行结果****70 71 刷新menubar72 刷新headbar73 刷新footbar74 加入动画75 移除picA76 移除picB77 */
感觉上有点像俄罗斯套娃,首先定义了一个接口对象,大家都是这个接口对象,只不过一层套一层,不断调用。
执行过程其实就是深度优先搜索。
一些值得注意的地方
组合模式不是父子关系,而是更类似于一种委托关系。
适用场景:只有用一致的方式对待列表中的每个叶对象的时候,才适合使用组合模式。
总结
组合模式可以让我们使用树形方式创建对象的结构,我们可以把相同的操作应用在组合对象和单个对象上。
0 0
- 《javascript设计模式与开发实践》阅读笔记(10)—— 组合模式
- 《javascript设计模式与开发实践》阅读笔记(10)—— 组合模式
- 《javascript设计模式与开发实践》阅读笔记(10)—— 组合模式
- 《javascript设计模式与开发实践》阅读笔记(11)—— 模板方法模式
- 《javascript设计模式与开发实践》阅读笔记(12)—— 享元模式
- 《javascript设计模式与开发实践》阅读笔记(14)—— 中介者模式
- 《javascript设计模式与开发实践》阅读笔记(11)—— 模板方法模式
- 《javascript设计模式与开发实践》阅读笔记(12)—— 享元模式
- 《javascript设计模式与开发实践》阅读笔记(11)—— 模板方法模式
- 《javascript设计模式与开发实践》阅读笔记(12)—— 享元模式
- 《javascript设计模式与开发实践》阅读笔记(11)—— 模板方法模式
- 《javascript设计模式与开发实践》阅读笔记(14)—— 中介者模式
- 《javascript设计模式与开发实践》阅读笔记(一)
- 《javascript设计模式与开发实践》阅读笔记(二)
- 《javascript设计模式与开发实践》阅读笔记(三)
- 《javascript设计模式与开发实践》阅读笔记(四)
- 《javascript设计模式与开发实践》阅读笔记(五)——高阶函数
- 【学习笔记javascript设计模式与开发实践(组合模式)----10】
- iOS应用图片命名规则
- php的文件操作
- java ASM
- 微信网页开发遇到的问题
- Java - concurrent包详解
- 《javascript设计模式与开发实践》阅读笔记(10)—— 组合模式
- 深入理解Java之线程池
- SVN提交和更新代码命令
- Openlayers之加载鹰眼控件
- 向网络发送GET/POST请求参数
- 情人节的表白神器:H5 canvas ❤动画面
- iOS AutoLayout
- 好消息!ios10越狱插件造成桌面图标消失的完美解决方法来了!!!
- iOS 数组去重