特点
树结构(组合对象、叶对象) - 只需要一次操作 对单个对象和组合对象的使用具有一致性 - 统一地使用组合结构中的所有对象,而不需要关心它究竟是组合对象还是单个对象
实质为深度优先搜索 每当对最上层的对象进行一次请求时,实际上是在对整个树进行深度优先的搜索
安全性问题
给叶对象也增加add方法,并且在调用这个方法时,抛出一个异常来及时提醒客户
符合开闭原则
我们改变了树的结构,增加了新的数据,却不用修改任何一句原有的代码,这是符合开放-封闭原则的
注意点
1、组合模式不是父子关系 - 一种聚合 - 组合对象把请求委托给它所包含的所有叶对象 - 能够合作的关键是拥有相同的接口
2、对叶对象操作的一致性 - 除了要求组合对象和叶对象拥有相同的接口之外 - 全体员工发放元旦的过节费1000块 - 过生日则不行
3、双向映射关系 - 比如某位架构师既隶属于开发组,又隶属于架构组 - 这种复合情况下我们必须给父节点和子节点建立双向映射关系 - 引入中介者模式来管理这些对象
4、用职责链模式提高组合模式性能 在实际操作中避免遍历整棵树,有一种现成的方案是借助职责链模式
使用
1、对象的部分-整体层次结构 2、统一对待树中的所有对象