意图:将对象组合成树形结构表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
动机: 软件在某些情况下,客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部结构(而非抽象接口)的变换将引起客户代码的频繁变化,带来了代码的维护性,扩展性等弊端。
适用性:
你想表示对象的部分-整体层次结构
你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中所有的对象。
结构:
参与者:
Component:为组合中的对象声明接口;在适当的情况下,实现所有类共有接口的缺省行为;声明一个接口用户访问和管理Component的子组件;在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。
Leaf: 在组合中表示叶结点对象,叶结点没有子结点;在组合中定义对象的行为。
Composite: 定义有子部件的那些部件的行为;存储子部件;在Component接口中实现与子部件有关的操作。
Client:通过component接口操纵组合部件对象
协作:
用户使用Component类接口与组合结构中的对象进行交互,如果接受者是叶结点,则直接处理请求;如果接受者是Composite,它通常将请求转发给它的子部件。
效果:
定义了包含基本对象和组合对象的类层次结构
简化客户代码
使得更容易增加新类型的组件
使设计更加一般化
实现:
代码示例如下:
1 |
|