目录

大话设计模式19:组合模式

大话设计模式:19.组合模式

组合模式:将对象组合成树形结构以表示’部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

TL;DR:通过自包含的结构,实现部分和整体有相同的调用形式,同时整体可以递归调用每一个部分,满足整体的需求。

组合模式结构图

1.优点

  1. 基本对象可以被组合成更复杂的组合对象
  2. 同时让客户可以一致的使用组合对象和单个对象

2.实现细节

  1. Component:负责为组合中的对象声明接口。通常用 Add 和 Remove 方法提供管理 Component 子部件的功能
  2. Leaf:实现 Component 接口,但不实现 Add 和 Remove,消除了叶节点和中间节点对象在抽象层次的区别,具备完全一致的接口,可以避免额外的判断
  3. Composite:除实现 Component 定义的接口外,用来存储子部件,实现枝节点功能,需要 Add 和 Remove 方法,需要所有子组件也调用的方法,通过遍历实现

3.使用场景

  1. 需要体现部分与整体层次的结构时
  2. 希望用户可以忽略组合对象和单个对象的不同,统一使用组合结构中的所有对象时

4.其他策略

  1. 透明方式:即上述的,不区分叶子节点和枝节点,在外界看来没有区别,具有完全一致的行为接口
  2. 安全方式:在 Component 中不声明 Add 和 Remove 方法,而是由 Composite 实现,所有树叶和树枝不具有相同的接口,客户端调用时需要做相应的判断