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模式的更多相关文章

  1. 组合模式/composite模式/对象结构型模式

    组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...

  2. C++基础——模拟事务 (2)Composite模式

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  3. Java 实现组合(Composite)模式

    类图 /** * 树 总体 * * @author stone * */ public class Tree { private TreeNode root; //根节点 public Tree(St ...

  4. 【结构型】Composite模式

    组合模式意在将对象组合成树形结构以表示部分与整体的层次结构关系,并且用户对单个对象的操作以有对组合对象的操作都是一致的.即:组合对象 is-a 单个对象,同时又可以组合着 n 个的单个对象(甚至于其他 ...

  5. (原创)composite模式和bridge模式是天生的好朋友

    composite模式的意图是:将对象组合成树形结构以表示“部分-整体”的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性.它的类图如下: composite模式的实现分为透明 ...

  6. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树 ...

  7. 设计模式之——Composite模式

    composite模式又叫做组合模式/复合模式. 它是一种能够使容器与内容具有一致性,创造出递归结构的模式. 示例程序是列出文件夹以及其内部文件与文件夹一览的功能: 可以由示例图看出,有一个电影文件夹 ...

  8. Composite模式 组合模式

    Android的ViewGroup 和 View 的关系,即是采用组合模式 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件 ...

  9. Composite模式(组合设计模式)

    Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也 ...

随机推荐

  1. angularjs backbone 集成requirejs 模块化

    首先认识requirejs requirejs是个包加载器,核心功能是模块化管理,可以实现按需加载. 重点是明白 模块化不是按需加载. 模块化的意义: 是通过代码逻辑表明模块之间的依赖关系和执行顺序, ...

  2. iOS应用架构谈 网络层设计方案

    网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大.另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking也被广泛使用.其它的ASIHttpRequ ...

  3. fiddler实现手机端抓包(代理)

    一.fiddler设置代理 1.打开Fiddler->Tools->Fiddler Options在Connection面板里将 Allow remote computers to con ...

  4. [BS-28] iOS中分页的几种算法

    iOS中分页的几种算法 总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResult == 0 ? total ...

  5. Android drawText获取text宽度的三种方式

    String str = "Hello";canvas.drawText( str , x , y , paint); //1. 粗略计算文字宽度Log.d(TAG, " ...

  6. Nginx基础整理

    目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个 ...

  7. iOS10 app连接不上网络的问题

    http://jingyan.baidu.com/article/29697b917f2069ab20de3c33.html

  8. Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted

    1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...

  9. SSIS Error The Execute method on the task returned error code 0x80131621

    Error Message: The Execute method on the task returned error code 0x80131621 (Mixed mode assembly is ...

  10. iOS禁用第三方键盘

    - (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)ext ...