组合模式(Composite)
参考:《研磨设计模式》
定义
将对象组合成树形以表示“局部-整体”的层次结构。使得用户对单个对象和组合对象使用具有一致性。 组合的关键就在于这个抽象类,既可以代表叶子对象,也可以代表组合对象。 类图
认识组合模式
- 目的:客户端不再区分是组合对象还是叶子对象
- 对象树:通常组合模式会组合成树形结构
- 组合模式中的递归 组合模式中的递归是对象递归组合,不是递归算法。递归算法之一个方法会调用方法自己,而组合模式的递归从设计上称递归关联,是对象关联关系的一种。
安全性和透明想
- 安全性:如果是安全的,客户不会发生误操作
- 透明性:不区分是叶子对象还是组合对象 结论:推荐使用透明性,由于保持了一致性
父组件引用
对于组合组件的删除和修改很有用,双向引用易于维护。
环状引用
todo:待看
优缺点
- 定义了包含基本类型和组合类型的类层次结构
- 统一了组合对象和叶子对象
- 简化了客户端调用
- 更容易扩展
思考
- 组合模式的本质:统一叶子对象和组合对象
- 合适选用组合模式
- 对象的部分-整体层次结构
- 统一使用组合结构的对象
相关模式
todo:待充分体会
- 和装饰
- 和享元
- 和迭代器
- 和访问者
- 和责任链
- 和命令