设计模式之一:组合模式

来源:互联网 发布: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)的多态性完成调用,可增加代码的复用性。

原创粉丝点击