阿Sam的设计模式学习笔记---- Composite模式
来源:互联网 发布:js 获取静态json文件 编辑:程序博客网 时间:2024/06/07 01:40
1, 功能
将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
Composite模式主要用于描述和解决一些具有“容器”特征的对象—它们又是对象,又是其他对象的容器。如果客户代码过多地依赖对象容器的内部实现,对象容器内部实现的变化会引起客户代码的变化,违反了设计原则中的DIP原则(高层模块不应依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象)
2, 基本思想
当我们看到“部分-整体”的概念时,就应该想到树结构,一棵树有根(整体),有枝(父部件的部分,子部件的整体---有点绕口啊!!),有叶(部分)。
为了保证部分-整体结构中,用户对单个对象和组合对象操作一致性,Composite就必须既能提供单个对象的操作,又要提供对象组合的管理。
因此,需要一个Component,为组合中的对象声明公有接口(适当情况中提供公有接口的缺省行为),这个Component还需要声明几个接口方法用于访问和管理子组件。如果需要递归访问,可以定义一个接口用于访问父节点。一棵树上所有节点都实现Component接口。
继承并实现Component的Composite就是根节点或中间节点。Composite首先是一个“容器”,它要管理它的组合对象,因此要定义管理对象组合的接口方法。同时Composite又是其“父部件”的子部件,它也要实现子部件的公有接口操作。
Leaf是“部分-整体”结构中最基础的对象。Leaf是叶节点,没有子节点,因此它没有子节点要管理。所以,Leaf中只需要实现公有接口的方法。
由若干Composite和Leaf组成了一个类似树的结构。可以参看下面的结构图。
Client对组合部件的操作是通过调用Component接口来完成。
3, 适用情况
表示对象的部分-整体层次结构
希望用户忽略组合对象与单个对象的不同,用户可以统一使用组合结构中的所有对象。
4, 结构
5, 总结
在开发过程中,当我们遇到“部分--整体”的对象结构时,我们就需要考虑是否可以用Composite模式。Composite模式具有下列优点:
Composite使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户不必关心自己处理的是单个对象还是整个组合结构。
更容易在组合体内加入对象部件,客户端不必因为加入了新对象部件而更改代码。
6, 相关模式
通常部件-父部件连接用于Responsibility of Chain模式
Decorator模式经常与Composite模式一起使用。当装饰和组合一起使用时,他们通常有一个公共的父类。
FlyWeight可以共享组件,但不能再引用他们的父部件。
Iterator可以用来遍历Composite.
Vistor将本来应该分布在Composite和Leaf类中的操作和行为局部化。
- 阿Sam的设计模式学习笔记---- Composite模式
- 阿Sam的设计模式学习笔记----Singleton模式
- 阿Sam的设计模式学习笔记---- Builder模式
- 阿Sam的设计模式学习笔记---- Adapter模式
- 阿Sam的设计模式学习笔记---- Bridge模式
- 设计模式学习笔记-Composite
- 《设计模式》学习笔记--组合模式Composite
- 设计模式学习笔记---composite模式
- 设计模式学习笔记Composite组合模式
- 设计模式学习笔记--合成(Composite)模式
- [设计模式学习笔记]COMPOSITE组合模式
- 阿Sam的设计模式学习笔记----Factory模式(之Simple Factory)
- 阿Sam的设计模式学习笔记----Factory模式(之Factory Method)
- 阿Sam的设计模式学习笔记----抽象工厂(Abstract Factory)模式
- 阿Sam的设计模式学习笔记---- 原型(Prototype)模式
- Composite——设计模式学习笔记
- 设计模式笔记-Composite模式
- 设计模式学习笔记八——Composite模式
- 对Adobe Flex的十大误解
- 利用过滤器实现request的编码转换
- 关于读书那点事
- ASP.NET的“~”路径
- VC的邮槽学习笔记总结
- 阿Sam的设计模式学习笔记---- Composite模式
- windows 内核对象
- 线性表应用一
- 正则表达式助记口诀
- {原创】男人的危机,并不只是影响形体!!sjzwl进来看
- 关于SqlServer 2005的诸多问题
- 今天开博了
- Eten and WM5-WM6 Reg Tricks - Hacks, Tips and Tricks for GR8 Performance!
- JavaFx实现(2)-随机图形绘制