Composite模式
1 意图:将对象组成树形结构,以表示“部分——整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
2 动机:同意处理图元对象和包含图元的容器对象。Composite通过递归的方式实现统一处理。
关键是一个抽象类,既能代表图元又能代表容器。
3 适用性:
. 表示"部分-整体"的层次结构
. 希望用户忽略组合对象和单个对象的不同,用户将统一使用组合结构中的所有对象。
4 参与者:
. Component(Graphic)
为组合中的对象声明接口。适当情况,实现所有类公有接口的缺省行为。声明一个接口用于访问和管理Component的子组件。
(可选)递归结构中定义一个接口,访问一个父部件,合适情况下实现它。
. leaf
表示叶节点对象,没有子节点。定义图元对象的行为。
. Composite
定义有子部件的那些部件的行为。存储子部件。在Component接口中实现与子部件有关的操作。
5 Client:通过Component接口操作组合部件的对象。
6 协作:使用Component类接口与组合结构中的对象交互。如果接收者是一个叶节点,直接处理请求。如果是Composite,转发给子部件。之前或之后加一些操作
7 效果:
Composite模式:
. 定义组合对象和基本对象
. 简化客户代码
. 使得更容易增加新类型的组件
8 实现:
考虑问题:
1)显式的父部件:父部件的引用支持责任链。
2)共享组件: 子部件将一些状态存储在外部,不向父部件发送请求,可以共享
3)最大化Component接口:
Composite模式的目的之一是,用户不知道使用的是Leaf还是Composite。
把仅对Composite有意义的操作放到Component,把Leaf看做没有子节点的Composite。然后Component提供缺省实现
4)声明管理子部件的操作
在Composite类层次结构中,哪一些类声明这些操作。
在Component中声明,是这些操作对Leaf有意义?还是在Composite和它的子类中声明并定义这些操作?
在安全性和透明性间权衡:
. 在类层次结构的根部定义子节点管理接口的方法良好的透明性,可以一致地使用所有的组件,以安全性为代价。可能做无意义的事,如在Leaf中增加和删减
. 在Composite类中定义管理子部件的方法比较安全。损失透明性,Composite和Leaf接口不同。
一般选择透明性,提供一个getcomposite。Leaf返回null composite返回this
5)Component是否应该实现一个Component列表
6) 子部件排序
7)使用高速缓冲存贮改善功能
8)由谁删除Component
9)存贮组件最好用什么数据结构
9 相关模式:
部件-父部件模式用于责任链
Decorator与Composite一起用。通常有一个公共父类,装饰必须支持Add、Remove、GetChild的Component接口
Flyweight让你共享组件
Composite模式的更多相关文章
- 组合模式/composite模式/对象结构型模式
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...
- C++基础——模拟事务 (2)Composite模式
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- Java 实现组合(Composite)模式
类图 /** * 树 总体 * * @author stone * */ public class Tree { private TreeNode root; //根节点 public Tree(St ...
- 【结构型】Composite模式
组合模式意在将对象组合成树形结构以表示部分与整体的层次结构关系,并且用户对单个对象的操作以有对组合对象的操作都是一致的.即:组合对象 is-a 单个对象,同时又可以组合着 n 个的单个对象(甚至于其他 ...
- (原创)composite模式和bridge模式是天生的好朋友
composite模式的意图是:将对象组合成树形结构以表示“部分-整体”的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性.它的类图如下: composite模式的实现分为透明 ...
- Java设计模式(8)组合模式(Composite模式)
Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树 ...
- 设计模式之——Composite模式
composite模式又叫做组合模式/复合模式. 它是一种能够使容器与内容具有一致性,创造出递归结构的模式. 示例程序是列出文件夹以及其内部文件与文件夹一览的功能: 可以由示例图看出,有一个电影文件夹 ...
- Composite模式 组合模式
Android的ViewGroup 和 View 的关系,即是采用组合模式 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件 ...
- Composite模式(组合设计模式)
Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也 ...
随机推荐
- Python中的函数修饰符@
首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装.比如有以下两个函数: 复制代码 def func1(): print 'I am function func1' def func2(): ...
- JAVA Math类
public class MathTest{ public static void main(String[] args) { /*---------下面是三角运算---------*/ //将 ...
- RDIFramework.NET 框架之组织机构权限设置
RDIFramework.NET 框架之组织机构权限设置 对于某些大型的企业.信息系统,涉及的组织机构较多,模块多.操作权限也多,对用户或角色一一设置模块.操作权限等比较繁琐.我们可以直接对某一组织机 ...
- [原创]java WEB学习笔记100:Spring学习---Spring Bean配置:SpEL详细介绍及代码演示
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 十六、Java基础---------集合框架之Set
写在前面的话,这篇文章在昨天就写好了,今天打开的时候一不小心将第二天的文章粘贴到了这篇文章,很不幸的是除了标题之外依然面目全非,今天带着沉痛的心情再来写这篇文章! 上篇文章介绍了Collection体 ...
- Firefox刷新页面和复选框的奇葩问题
Firefox刷新页面后数据还在,估计很多人都碰到过. 但是有一个奇怪的地方就是复选框,如果你默认是勾选了,然后访问者取消勾选,刷新完之后,还是没有勾选,这是为什么? Firefox奇葩的地方就在于c ...
- RF--换行
引自:http://blog.csdn.net/lvtingting2007/article/details/42173991
- js计时器方法 setInterval(),setTimeout()
window.setInterval() 周期性地调用一个函数(function)或者执行一段代码. var intervalID = window.setInterval(func, delay[, ...
- free查看可用缓存
本篇转自:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上free命令的输出. 下面是fr ...