宏命令-示例

var closeDoorCommand = {execute: function(){console.log( '关门' );}
};var openPcCommand = {execute: function(){console.log( '开电脑' );}
};var openQQCommand = {execute: function(){console.log( '登录QQ' );}
};var MacroCommand = function(){return {commandsList: [],add: function( command ){this.commandsList.push( command );},execute: function(){for ( var i = 0, command; command = this.commandsList[ i++ ]; ){command.execute();}}}};var macroCommand = MacroCommand();macroCommand.add( closeDoorCommand );
macroCommand.add( openPcCommand );
macroCommand.add( openQQCommand );macroCommand.execute();

组合模式

组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性,下面分别说明。

❏ 表示树形结构。通过回顾上面的例子,我们很容易找到组合模式的一个优点:提供了一种遍历树形结构的方案,通过调用组合对象的execute方法,程序会递归调用组合对象下面的叶对象的execute方法,所以我们的万能遥控器只需要一次操作,便能依次完成关门、打开电脑、登录QQ这几件事情。组合模式可以非常方便地描述对象部分-整体层次结构。

❏ 利用对象多态性统一对待组合对象和单个对象。利用对象的多态性表现,可以使客户端忽略组合对象和单个对象的不同。在组合模式中,客户将统一地使用组合结构中的所有对象,而不需要关心它究竟是组合对象还是单个对象。

注意事项

1.组合模式不是父子关系

2.对叶对象操作的一致性

3.双向映射关系

4.用职责链模式提高组合模式性能

使用场景

组合模式如果运用得当,可以大大简化客户的代码。一般来说,组合模式适用于以下这两种情况。

❏ 表示对象的部分-整体层次结构。组合模式可以方便地构造一棵树来表示对象的部分-整体结构。特别是我们在开发期间不确定这棵树到底存在多少层次的时候。在树的构造最终完成之后,只需要通过请求树的最顶层对象,便能对整棵树做统一的操作。在组合模式中增加和删除树的节点非常方便,并且符合开放-封闭原则。

❏ 客户希望统一对待树中的所有对象。组合模式使客户可以忽略组合对象和叶对象的区别,客户在面对这棵树的时候,不用关心当前正在处理的对象是组合对象还是叶对象,也就不用写一堆if、else语句来分别处理它们。组合对象和叶对象会各自做自己正确的事情,这是组合模式最重要的能力。

JavaScript设计模式:组合模式相关推荐

  1. javascript设计模式-组合模式

    1 <!DOCTYPE HTML> 2 <html lang="en-US"> 3 <head> 4 <meta charset=&quo ...

  2. JavaScript设计模式——组合模式

    CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程.这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路.学习之乐,独乐乐,不如众乐 ...

  3. JavaScript设计模式系列—模式篇总结(上)

    转载请注明预见才能遇见的博客:http://my.csdn.net/ 原文地址:https://blog.csdn.net/pcaxb/article/details/102517956 JavaSc ...

  4. 设计模式---组合模式

    设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...

  5. Java设计模式 —— 组合模式(Composite)

    Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...

  6. JS设计模式--组合模式

    JS设计模式–组合模式 昨天学习了白贺翔老师的JS组合模式,现在把我学到的分享出来叭O(∩_∩)O,直接看下面代码 <!DOCTYPE html> <html lang=" ...

  7. js设计模式——组合模式

    组合模式将对象组合成树形结构,以表示"部分-整体"的层次结构.除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,是的用户对单个对象和组合对象的使用具有一致性. ...

  8. 设计模式----组合模式UML和实现代码

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是组合模式? 组合模式(Composite)定义:将对象组合成树形结构以表示'部分---整体'的层次结构.组合模式使得 ...

  9. js设计模式-组合模式

    组合模式是一种专为创建web上的动态用户界面而量身定制的模式.使用这种模式,可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象. ...

  10. 大话设计模式—组合模式

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...

最新文章

  1. 情人节,你刚表白,而我已经开始选哪里拍婚纱照了~
  2. golomb哥伦布编码——本质上就是通过0来区分商和余数
  3. 升级Xcode7.3 iOS9.3后,unity转C++代码出现 2 errors
  4. 查看python版本号-怎么查看python版本号
  5. 验证部分表单是否重复
  6. Linux系统的各种安装方法与修复技巧
  7. Uninterruptible Sleep(不可中断的睡眠)
  8. PAT乙级 1033 旧键盘打字 (20 分)
  9. linux自动更新漏洞,Linux爆本地提权漏洞 请立即更新udev程序
  10. java下载网络文件_java 从网络Url中下载文件
  11. C# AE 对图层筛选要素后显示/只显示符合条件的要素
  12. Python中的staticmethod和classmethod
  13. Truecrypt之死
  14. 水电图纸——总配电箱——1
  15. 新大陆云平台的.jar .sdk打包
  16. AI插画师:生成对抗网络
  17. Java图像处理方面的工具库和开发包
  18. AutoHotKey的那些事儿:(一)、AutoHotkey常用命令
  19. 区块链随想录——BitCoin的未来会如何?
  20. c语言用空格分隔和用逗号分隔,c语言程序设计课呵件第02章简单程序设计.ppt

热门文章

  1. 老域名值不值得购买?买老域名需要注意啥?
  2. 基于Matlab融合惯性测量单元和全球定位系统数据估计地面车辆的位置和方向(附源码)
  3. 安卓开发学习11-1:Android程序调试:DDMS工具使用
  4. “10万元电商店”为何一夜之间在三四线城市火了
  5. CSTgif动图导出 与gif导出失败解决方法
  6. 常见的网站服务器环境搭建
  7. 【git】Git 与SVN
  8. Marshal Unmarshal in golang
  9. Unity3d导入图片自动修改TextureType为Sprite(2D and UI)及设置Packing Tag为文件夹名。
  10. Cesium立体建筑物闪烁效果