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. Ajaxupload.js上传插件使用

    注意一下火狐,360IE78下的坑: 返回过来的response在不同浏览器下的字符串不一致 // response(chrome):<pre style="word-wrap: br ...

  2. prototype

  3. Nginx基础整理

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

  4. 51CTO专访淘宝清无:漫谈Nginx服务器与Lua语言

    http://os.51cto.com/art/201112/307610.htm 说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx.虽然说Apache依然是Web服务器的老 ...

  5. 学习 Linux,101: 使用基本 SQL 命令

    概述 在本教程中,将学习结构化查询语言 (SQL),包括: 使用基本 SQL 命令 执行基本数据操作 本教程将简要介绍您需要知道的与 LPI 102 考试相关的 SQL 概念.   回页首 数据库和 ...

  6. jquery隐藏table表格的某一列

    jquery隐藏table表格的某一列: $('table tr').find('td:eq(13)').hide(); 隐藏table的第13列

  7. Writing Your Own jQuery Plugins

    Setting Up <script src="js/jquery-1.9.1.min.js"></script> <script src=" ...

  8. php之XML转数组函数的方法

    <?/** * xml2array() will convert the given XML text to an array in the XML structure. * Link: htt ...

  9. PDO处理大批量数据的入库

    <?php //最东端 东经135度2分30秒 //最西端 东经73度40分 //最南端 北纬3度52分 //最北端 北纬53度33分 //转换为度的单位$dbName = 'txhl';//数 ...

  10. MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...