大话设计模式19:组合模式
目录
大话设计模式:19.组合模式
组合模式:将对象组合成树形结构以表示’部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
TL;DR:通过自包含的结构,实现部分和整体有相同的调用形式,同时整体可以递归调用每一个部分,满足整体的需求。
1.优点
- 基本对象可以被组合成更复杂的组合对象
- 同时让客户可以一致的使用组合对象和单个对象
2.实现细节
- Component:负责为组合中的对象声明接口。通常用 Add 和 Remove 方法提供管理 Component 子部件的功能
- Leaf:实现 Component 接口,但不实现 Add 和 Remove,消除了叶节点和中间节点对象在抽象层次的区别,具备完全一致的接口,可以避免额外的判断
- Composite:除实现 Component 定义的接口外,用来存储子部件,实现枝节点功能,需要 Add 和 Remove 方法,需要所有子组件也调用的方法,通过遍历实现
3.使用场景
- 需要体现部分与整体层次的结构时
- 希望用户可以忽略组合对象和单个对象的不同,统一使用组合结构中的所有对象时
4.其他策略
- 透明方式:即上述的,不区分叶子节点和枝节点,在外界看来没有区别,具有完全一致的行为接口
- 安全方式:在 Component 中不声明 Add 和 Remove 方法,而是由 Composite 实现,所有树叶和树枝不具有相同的接口,客户端调用时需要做相应的判断