简介

组合模式(Composite Pattern),这种模式你或许没有听说过,但是一定用过,他是23种设计模式总比较常用的模式。

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


组合模式的基本结构

组合模式有三个基本部件: 即抽象部件、叶子部件、树枝部件,这三个部件组成的一颗树形结构。

  • 抽象构件(Component):叶子构件和容器构件继承的抽象类,包含叶子和容器的共有行为的声明,如业务方法,也可能包含管理叶子的方法。
  • 叶子构件(Leaf):树的叶结点,实现抽象构件的业务方法,对于容器特有的管理子结点的方法,可以使用空方法或者抛出异常处理。
  • 树枝构件(Composite):树的叶结点,实现抽象构件的业务方法,对于容器特有的管理子结点的方法,可以使用空方法或者抛出异常处理。

此图来源于网络,侵权删

典型的组合模式


组合模式的两种分类

组合模式根据代码实现的不同分为透明组合模式和安全组合模式

透明组合模式:把组合(树节点)使用的方法放到统一行为(Component)中,让不同层次(树节点,叶子节点)的结构都具备一致行为;通俗的讲就是叶子节点和树枝构建拥有相同的方法。

透明组合模式

安全组合模式:抽象构件中只声明了业务方法,叶结点没有管理子结点的方法,是安全的。但是叶子构件和容器构件不一致,客户端需要区别对待。即叶子节点和树枝构建有不同的实现。

安全组合模式


代码实例

透明组合模式

透明组合模式中定义一个抽象类 Component ,并定义 addChild()、removeChild()和getChild()三个方法,并且在 Composite 和 Leaf 中实现他们

安全组合模式

在安全组合模式中,同样定义一个抽象类 Component ,但是 addChild()、removeChild()和getChild()这三个方法,并没有在 Component 中定义,而是在Composite 中单独定义的

总结

组合模式将”客户代码与复杂的对象容器结构“解耦,可以更容易地往组合对象中加入新的构件。但是有时候系统需要遍历一个树枝结构的子构件很多次,这时候可以考虑把遍历子构件的结构存储在父构件里面作为缓存。因此不是所有情况都可以使用组合模式。

当你想表达对象的部分-整体的层次结构时或者希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象时我建议你使用组合模式。

设计模式——组合模式相关推荐

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

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

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

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

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

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

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

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

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

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

  6. java设计模式 组合_JAVA 设计模式 组合模式

    用途组合模式 (Component) 将对象组合成树形结构以表示"部分-整体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构 ...

  7. Java常用设计模式————组合模式

    引言 组合模式,是一种类似递归算法的结构性设计模式,通过以简单的 List ,组合本类对象,实现树状对象结构的"部分.整体"的层次. 它可以让调用程序不需要关心复杂对象与简单对象的 ...

  8. C++设计模式-组合模式

    目录 基本概念 代码与实例 基本概念 个人感觉Qt的对象树就是运用了这种设计模式!!! 当然,只是个人感觉,本人并没有研究Qt的源码 组合模式(Composite):将对象组合成树形结构以表示'部分- ...

  9. [Head First设计模式]生活中学设计模式——组合模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  10. 简说设计模式——组合模式

    一.什么是组合模式 前面我们讲过Swing(Java进阶篇(六)--Swing程序设计(上)),在Swing中,容器Container和组件如Button.JLabel等等之间的关系就是组合关系,一个 ...

最新文章

  1. 基于Python+Django实现药品管理系统
  2. java编程赋值运算符_(24)赋值运算符
  3. mysql数据库及应用_mysql数据库介绍及应用
  4. Python中的两种路径
  5. js基础之动画(一)
  6. oracle ebs采购申请接口表,Oracle EBS BOM接口表操作.doc
  7. 大龄程序员找不到工作,程序员真的是吃青春饭的吗?
  8. 免费的PDF转换器有哪些?小圆象PDF转换器办公达人必备工具
  9. 群论:群的定义与阿贝尔群
  10. 如果真的存在外星人,AI终将找到它
  11. 视唱练耳训练小程序开发,摆脱传统训练制约性
  12. 关于Microsoft Store无法更新的解决方案
  13. 从“时间机器”备份恢复 Mac
  14. 树莓派项目实践 [1] —— 编程控制继电器组件实现电路开闭(C语言)
  15. 经典数值RPG游戏——《魔塔》调研报告
  16. 【Vue】 错误:Already included file name ‘××ב differs from file name ‘××ב only in casing的解决方法
  17. 2022年最新面试JVM面试追魂夺命17问,教科书级回答
  18. SpringBoot配置Mybatis多数据源
  19. 深度优先搜索是什么?
  20. SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync)

热门文章

  1. 计算机科学技术对教育的影响,计算机科学技术在计算机教育中的应用分析(原稿)...
  2. php中的接口 interface 和实现 implement
  3. win32项目--获取、修改计算机屏幕分辨率
  4. 结构化程序设计方法和面向对象程序设计方法的区别
  5. 腾讯云重装和还原操作系统
  6. 微信小程序开发-view视图组件
  7. 用自动控制理论分析电力电子中的基本斩波电路
  8. 向日葵android客户端,向日葵安卓3.1客户端教程
  9. 手机看java源码软件_pin.java 源代码在线查看 - 一个专门为手机写的程序 资源下载 虫虫电子下载站...
  10. 谷歌浏览器提示应用程序无法启动