Skip to content

特点

树结构(组合对象、叶对象) - 只需要一次操作 对单个对象和组合对象的使用具有一致性 - 统一地使用组合结构中的所有对象,而不需要关心它究竟是组合对象还是单个对象

实质为深度优先搜索 每当对最上层的对象进行一次请求时,实际上是在对整个树进行深度优先的搜索

安全性问题

给叶对象也增加add方法,并且在调用这个方法时,抛出一个异常来及时提醒客户

符合开闭原则

我们改变了树的结构,增加了新的数据,却不用修改任何一句原有的代码,这是符合开放-封闭原则的

注意点

1、组合模式不是父子关系 - 一种聚合 - 组合对象把请求委托给它所包含的所有叶对象 - 能够合作的关键是拥有相同的接口

2、对叶对象操作的一致性 - 除了要求组合对象和叶对象拥有相同的接口之外 - 全体员工发放元旦的过节费1000块 - 过生日则不行

3、双向映射关系 - 比如某位架构师既隶属于开发组,又隶属于架构组 - 这种复合情况下我们必须给父节点和子节点建立双向映射关系 - 引入中介者模式来管理这些对象

4、用职责链模式提高组合模式性能 在实际操作中避免遍历整棵树,有一种现成的方案是借助职责链模式

使用

1、对象的部分-整体层次结构 2、统一对待树中的所有对象