[设计模式] 组合模式

意图

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

适用性

以下情况使用Composite模式:

  • 你想表示对象的部分-整体层次结构
  • 你希望用户忽略组合对象与单个对象的不同, 用户将统一地使用组合结构中的所有对象

结构

组合模式结构图

参与者

  • Component
    • 为组合中的对象声明接口
    • 在适当的情况下, 实现所有类共有接口的缺省行为
    • 声明一个接口用于访问和管理Component的子组件
    • (可选)在递归结构中定义一个接口, 用于访问一个父部件, 并在合适的情况下实现它
  • Leaf
    • 在组合中表示叶节点对象, 叶节点没有子节点
    • 在组合中定义图元对象的行为
  • Composite
    • 定义有子部件的那些部件的行为
    • 存储子部件
    • 在Component接口中实现与子部件有关的操作
  • Client
    • 通过Component接口操纵组合部件的对象

协作

用户使用Component类接口与组合结构中的对象进行交互. 如果接收者是一个叶节点, 则直接处理请求. 如果接收者是Composite, 它通常将请求发送给它的子部件, 在转发请求 之前与/或之后可能执行一些辅助操作.