定义

Composite模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体“的层次结构,并使用户对单个对象和组合对象的使用具有一致性。

动机

当处理树形结构的数据时,我们常常需要区别对待叶子结点和内部结点,这使得代码更加复杂,以至于容易出错。因此,如果有一种方法,可以使我们可以统一处理叶子结点和内部结点,那么,对于我们提高代码的质量是十分有帮助的。
Composite模式正是这样一种设计模式,它可以使我们以统一的方式去处理叶子结点(单个对象)和内部结点(组合对象)。

适用性

当你想表示“部分-整体“的层次结构,并希望忽略组合对象和单个对象不同,可以使用统一的方式来处理组合结构中的所有对象。

结构

Compenent

  • 所有对象的抽象,包括组合对象和单个对象
  • 声明对象的接口

Leaf

  • 表示单个对象
  • 实现所有的Compent接口

Composite

  • 代表组合对象
  • 实现所有的Compent接口
  • 还包括了对其孩子对象进行操作的接口

例子

在下面的例子中,我们实例一个图形系统。图形可以是椭圆(Ellipse)或者复合图形(CompositeGraphic),每个图形都可以打印出来,打印接口在Graphic接口中声明。
这个图形系统是易于扩展的,例如加入矩形,圆形等,也可以加入其他的方法,例如缩放等。

Graphic.java

/** "Component" */
interface Graphic {// Prints the graphic.public void print();
}

CompositeGraphic.java

/** "Composite" */
import java.util.List;
import java.util.ArrayList;
class CompositeGraphic implements Graphic {// Collection of child graphics.private List<Graphic> childGraphics = new ArrayList<Graphic>();// Prints the graphic.public void print() {for (Graphic graphic : childGraphics) {graphic.print();}}// Adds the graphic to the composition.public void add(Graphic graphic) {childGraphics.add(graphic);}// Removes the graphic from the composition.public void remove(Graphic graphic) {childGraphics.remove(graphic);}
}

Ellipse.java

/** "Leaf" */
class Ellipse implements Graphic {// Prints the graphic.public void print() {System.out.println("Ellipse");}
}

最后是使用这套图形系统的测试程序。它首先初始化4个椭圆(ellipse1, ellipse2, ellipse3, ellipse4),然后构造2个复合图形(graphic1, graphic2),再使用这2个复合图形来构造一个复合图形(graphic),最后使用Graphic接口(print)来将graphic图形打印出来:

Program.java

/** Client */
public class Program {public static void main(String[] args) {// Initialize four ellipsesEllipse ellipse1 = new Ellipse();Ellipse ellipse2 = new Ellipse();Ellipse ellipse3 = new Ellipse();Ellipse ellipse4 = new Ellipse();// Initialize three composite graphicsCompositeGraphic graphic = new CompositeGraphic();CompositeGraphic graphic1 = new CompositeGraphic();CompositeGraphic graphic2 = new CompositeGraphic();// Composes the graphicsgraphic1.add(ellipse1);graphic1.add(ellipse2);graphic1.add(ellipse3);graphic2.add(ellipse4);graphic.add(graphic1);graphic.add(graphic2);// Prints the complete graphic (four times the string "Ellipse").graphic.print();}
}

输出:

Ellipse
Ellipse
Ellipse
Ellipse

参考资料

  1. https://en.wikipedia.org/wiki/Composite_pattern
  2. http://www.tutorialspoint.com/design_pattern/composite_pattern.htm
  3. http://baike.baidu.com/view/3591789.htm

组合(Composite)模式相关推荐

  1. 设计模式学习笔记——组合(Composite)模式

    设计模式学习笔记--组合(Composite)模式 @(设计模式)[设计模式, 组合模式, composite] 设计模式学习笔记组合Composite模式 基本介绍 组合案例 类图 实现代码 Ent ...

  2. 设计模式---组合Composite模式

    1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 在绘图编辑器和图形捕捉系统这样的图形应用程 ...

  3. 八、结构模式之组合(Composite)模式

    组合模式属于对象的结构模式,有时又叫做部分-整体模式,组合模式将对象组织到树结构中,可以用来描述整体与部分的联系.其可以使客户端将单纯元素和组合元素同等对待. 当需求中是体现部分与整体层次的结构时,以 ...

  4. Java设计模式之组合Composite模式代码示例

  5. 设计模式之组合模式(Composite 模式)

    引入composite模式 在计算机文件系统中,有文件夹的概念,文件夹里面既可以放入文件也可以放入文件夹,但是文件中却不能放入任何东西.文件夹和文件构成了一种递归结构和容器结构. 虽然文件夹和文件是不 ...

  6. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...

  7. COMPOSITE(组合)模式

    1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite模式使得用户对单个对象和组合对象的使用具有一致性. 2.动机 在绘图编辑器和图形捕捉系统这样的图形应 ...

  8. Java组合实体模式

    组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中.一个组合实体是一个 EJB 实体 bean,代表了对象的图解.当更新一个组合实体时,内部依赖对象 beans ...

  9. 结构型模式之Composite模式

    1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.适用性 以下情况使用Composite模式 (1 ...

最新文章

  1. 2020德勤面试开始了吗_2020下半年教师资格证面试时间已出!12月10日开始报名
  2. 知识图谱要看的书 了解的人 公众的号
  3. sql 拼接int类型的字段_SQL 基础教程—第一章:4. 表的创建
  4. 信息系统项目管理师-论文专题(二)整体管理论文写作
  5. Web.Config介绍
  6. Visual Studio Code 中文下载
  7. ztree改变节点颜色
  8. pwm控制的基本原理_单片机PWM控制基本原理详解~
  9. HDU 4873 ZCC Loves Intersection(可能性)
  10. css 行内水平均等排布方式
  11. idea项目(git)版本回退
  12. [cdq分治][树状数组] Bzoj P3262 陌上花开
  13. Power oj2498/DP/递推
  14. 主成分分析——SPSS实操
  15. 小白如何搭建自己的网络服务器
  16. Linux虚拟主机管理系统---wdcp
  17. 第五章 图像基础(设备内容)
  18. Python--print(xx)内容为空,打印不出内容;原因是文件句柄对象在迭代后,对象内的数据会逐渐清空
  19. muduo源码剖析——Singleton单例模式之懒汉模式与DCL双重检查
  20. 计算机基础——Windows 7操作系统

热门文章

  1. 漫谈 · 软件设计中的具象化
  2. 【计算机体系结构】计算机体系结构(6) 并行处理技术(2) 多处理机
  3. (转)乔布斯:遗失的访谈1995
  4. 联想e470锁定计算机,联想ThinkPad笔记本Fn键关闭与启用方法
  5. E002-CRC查表法-表的由来与实现1
  6. 如何写好科研论文 撰写技巧(四)
  7. UGC、PGC和OGC的区别
  8. 计算机视觉岗秋招面经
  9. 浅谈MySQL数据库备份的几种方法
  10. 异构核间通信mailbox原理研究