设计模式之一:组合模式
来源:互联网 发布:mac windows10截图 编辑:程序博客网 时间:2024/05/24 03:23
1.定义
将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用组合对象具有一致性。
2.涉及角色
Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。在安全模式中,Component并不定义管理子对象的方法,而是由Composite定义管理子对象的方法。
Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除(remove)等。
3.概述
组合模式根据接口(Component)的不同分为透明模式和安全模式。
透明模式:Component定义通用方法以及所有管理子对象的方法。好处是所有构件类都有相同的接口,在客户端看来,Leaf和Composite在接口层面上没有区别。
安全模式:Composite中定义管理子对象的方法。
以下是安全模式的类图结构,透明模式中,Leaf也要实现管理子对象的方法,只不过方法是无意义的。
4.总结
组合模式有时候又叫做部分-整体模式,在树形问题中,模糊了简单对象和容器对象的概念,客户端程序可以想处理简单对象一样处理容器对象,从而使客户端程序与容器对象的内部结构解耦。
组合模式可以优化处理递归和分级数据结构。
组合模式案例:PC的文件系统(文件和文件夹),Android的View和ViewGroup。
5.实现要点
(1)组合模式使用树形结构实现普遍存在的对象容器,将一对多的关系转换为一对一的关系,使客户端代码一致性的处理简单对象和容器对象。
(2)将客户端代码和复杂的容器对象结构解耦是核心思想,解耦之后,客户端代码与抽象接口(Component),而不是容器对象的内部结构发生依赖关系。
(3)在组合模式中,可以让父对象的子对象反向追溯;如果父对象有频繁的遍历请求,可使用缓存技巧实现效率。
(4)客户端尽量不要调用Leaf的方法,而是借助接口类(Component)的多态性完成调用,可增加代码的复用性。
- 设计模式之一:组合模式
- 设计模式:组合模式
- 设计模式-----组合模式
- 设计模式 组合模式
- 设计模式--组合模式
- 设计模式---组合模式
- 【设计模式】组合模式
- 设计模式 - 组合模式
- 设计模式----组合模式
- 设计模式 - 组合模式
- 设计模式:组合模式
- 设计模式 - 组合模式
- 设计模式-组合模式
- 设计模式 - 组合模式
- 【设计模式】组合模式
- 设计模式--组合模式
- 设计模式-组合模式
- 设计模式:组合模式
- 14.智能(smart)指针,实现细节
- How to solve (Buffer too Small".0) problem?
- 浅谈C/C++内存泄漏及其检测工具
- 用GetLastError()来定位出错信息
- 【性能分析】初探VS2010中的Profile(性能剖析)功能
- 设计模式之一:组合模式
- android-Service和Thread的区别
- ExtJs4 笔记(5) Ext.Button 按钮
- Android 去掉横竖屏切换时的转屏动画
- lxc调用init流程
- 堆和栈的区别
- 正则提取PHP代码里的部分数据
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误
- haskell(26)