组合模式

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

介绍

意图:

  • 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
  • 当你有以下想法时,你可以使用组合模式:
    1. 您想表示对象的部分-整体层次结构(树形结构)。
    2. 您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

应用实例:

  1. 算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。
  2. 在 JAVA AWT 和 SWING 中,对于 ButtonCheckbox 是树叶,Container 是树枝。

优点:

  1. 高层模块调用简单。
  2. 节点自由增加。

缺点:

  • 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

实现

以公司的雇员举例子:

  1. 我们首先用一个类 Employee 表示公司中的所有雇员,它的所有属性足以满足需求;
  2. 然后为了表示公司雇员之间的层级关系,我们令每一个雇员持有一个下属的列表。

依赖关系如下图所示:

../CompositePattern.jpg