组合模式
定义
动机
-
顺序->树形,表示整体/部分(迭代器-> 组合)
-
统一处理整体和部分
定义
将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
类图
- Component
- 为组合中的对象声明接口
- 在适当的情况下,实现所有类共有接口的缺省行为
- 在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它(可选)
- Leaf
- 在组合中表示叶节点对象、叶节点没有子节点
- 在组合中定义图元对象的行为
- Composite
- 定义有子部件的那些部件的行为
- 存储子部件
- 在Component接口中实现与子部件有关的操作
使用场景
- 你想表示对象的部分-整体层次结构
- 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用结构中的所有对象。
- 可以结合责任链模式,迭代器,装饰器,享元,访问者模式一块使用。
优点
- 平铺直叙 -> 层次
- 各叶子节点足够内聚
- 简化客户端代码,一致的方式使用组合对象和单个对象
- 开闭,面向接口,方便地装载卸载子对象。
- 职责单一,叶子节点足够内聚简单,便于测试
- 可以面向顶层接口,统一做一些事情(eg.是否可降级,是否可异步处理,日志aop等等)
参考
用于实现 Web 服务的 SOA 编程模型,第 3 部分: 流程编排和业务状态机