Composite
来源:互联网 发布:红尘网络 编辑:程序博客网 时间:2024/05/12 03:37
使用场景
需要表示对象的部分-整体层级结构
想要客户能够忽略对象组合和单个对象之前的差异。客户端同等对待所有的对象。
结构
参与对象
组件
- 为所有的对象声明接口
- 为所有的类实现默认的行为
- 为访问和管理它的子组件声明接口
- (可选)为访问父组件声明接口
叶子节点
- 在组合结构中代表叶子对象,没有子对象
- 定义组合结构中的原始操作
复合节点
- 为拥有子节点的组件定义操作
- 存储子节点
- 实现组合系统中子节点相关的操作
客户端
- 通过组件接口操纵系统中的所有对象
协作方式
客户端通过组件接口来和组合系统中的对象进行交互。如果被操作对象是叶子节点,请求直接被处理。如果被操作对象时组合对象,它会把请求分发给它的子节点,然后在分发前后执行相关的操作。
使用结果
定义一套包含原始对象和组合对象的类层级结构。原始对象能够聚合称为复杂的对象,以此进行递归操作。
使得客户端变得简单。客户能够统一对待组合对象和单个对象。客户通常不知道他们在处理的是单个对象还是组合对象,这样能简化客户端代码,避免使用很多case代码。
使添加新的组件种类变得更容易。新定义的组件或者叶子节点能够在系统中正常工作,而客户端不需要额外的操作。
使设计更加普遍。添加新类型的节点边的容易的代价是,使得限制组合对象的组件变得更加困难。有时,你会需要一个只包含某种组件的复合对象,这时,你就不能依赖类型系统来保证这种完整性了,你需要做运行的检测。
0 0
- Composite
- composite
- composite
- Composite
- Composite
- Composite
- Composite
- Composite
- Composite
- Composite
- Composite
- Composite模式
- composite 模式
- composite-id
- composite模式
- iterator&composite
- Composite模式
- Composite模式
- c语言sprintf用法浅谈
- 令人难以置信的泰国奥德赛5天4晚wv梦幻之旅449美金(会员抵扣200积分)2015年2月4日-2月8日
- jps工具(查看java进程)
- 如何禁止KEIL初始化RAM为零& 如何判断是软复位还是上电复位[转载]
- MapReduce倒排索引简单实现
- Composite
- 数字图像处理入门 笔记
- /usr/bin/ld: cannot find -lxxx 问题总结
- 【VC】方便快捷的内存CDC类。。
- Android 4.4 Graphic系统详解(2) VSYNC的生成
- Testin实验室:陌陌APP通过率为94.92% 基本满足移动社交需求
- 阿姆斯特朗数
- i.MX6移植QT
- Linux、gcc编译器、希尔排序