一、组合模式
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便。
引子:树 (Tree)是 n(n≥0)个结点的有限集 T,T 为空时称为空树,否则它满足如下两个条件:
1) 有且仅有一个特定的称为根(Root)的结点;
2) 其余的结点可分为 m(m≥0)个互不相交的子集 Tl,T2,…,Tm,其中每个子集本身又 是一棵树,并称其为根的子树(SubTree)。
上面给出的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。而这里的子树可以是叶子也可以是分支。
组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。在《设计模式》一书中给出的定义是:将对象以树形结构组织起来,以达成“部分-整体”的层次结构, 使得客户端对单个对象和组合对象的使用具有一致性。
组合模式有以下优点:
1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关心自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件.客户端不必因为加入了新的对象部件而更改代码。这 一点符合开闭原则的要求,对系统的二次开发和功能扩展很有利!
当然组合模式也少不了缺点:组合模式不容易限制组合中的构件
组合模式是一个应用非常广泛的设计模式,解释器模式、享元模式中都是用到了组合模式。