组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。

我个人的感觉,组合模式就是将已经逻辑解耦的小模块如何组合完成更复杂逻辑的指导思想。
树形结构在编程中十分常见,树形结构的好处我说不上太多,但是可以确定,目前在数据结构中,树是一个大模块,有很多成熟的对树结构进行操作的思想和方法,因此将小模块组合成树形结构,是易于被操作的。

组合模式的另一个好处是通过对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性。

看起来就是接口一致性。仍旧是封装变化,将不变的(如接口名)暴露出去。

一些值得注意的地方

  1. 组合模式不是父子关系,父节点的行为更接近代理,将请求转发给子节点。
  2. 对叶子对象操作的一致性。很简单,不一致怎么进行如递归这种操作。
  3. 双向映射关系。当叶子结点的归属有交叉时,则需要建立叶子结点和父节点的双向映射关系来避免叶子结点被重复计算。但是同时也增加了它们的耦合性,当删除一个对象时,也要在映射对象中删除。
  4. 职责链模式优化组合模式的性能。但是这个职责链书中没有给出详细解释。。。

    何时使用

  5. 表示对象的部分-整体的层次结构。

  6. 希望统一对待树中的所有对象。