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. JAVA程序改错 (易错题)

    JAVA程序改错 1. abstract class Name { private String name; public abstract boolean isStupidName(String n ...

  2. C++ Primer Pluse_7_课后题

    #include <iostream> using namespace std; double Sum2(double x, double y) { double sum = 0; if ...

  3. 利用tween,使用原生js实现模块回弹动画效果

    最近有一个需求,就是当屏幕往下一定像素时,下方会有一个隐藏的模块马上显现出来,向上运动后带有回弹效果.然后屏幕滚回去时这个模块能够原路返回 其实这个效果css3就可以很轻松实现,但是公司要求最低兼容i ...

  4. docker images之间相互通信 link

    同一个host上的两个container 首先启动一个nginx. container起名叫netease_nginx docker run --detach --name netease_nginx ...

  5. 基于ArcGIS JS API的在线专题地图实现

    0 引言     专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...

  6. winform 对话框、打印框

    winform 对话框控件 1.打开文件对话框(OpenFileDialog) 2.保存文件对话框(SaveFileDialog) 3.字体对话框(FontDialog) 4.颜色对话框(ColorD ...

  7. NFC基础

    本文档描述了在Android执行的基本的NFC技术,它说明了如何发送和接收NDEF消息的形式的NFC数据,并介绍Android框架中支持这些功能的API,对于更高级的主题,包括讨论非NDEF数据相关的 ...

  8. .NET学习记录1

    .NET 可以干什么呢? 1.桌面应用程序 (WinForm ) 2.internet 应用程序(asp.net) 3.手机应用开发(wp7)好像现在C#也能开发android应用了 现在主要有两个方 ...

  9. 安装 Open Live Writer

    2016年12月19日20:22:02 一直希望能有一个独立的客户端来书写博客,作为一个新手,希望能够有一个强大的编辑器来实现这个功能.然后就赶着去下载windows live Writer.然后才发 ...

  10. AJAX-----10iframe模拟ajax文件上传效果原理2

    在实际开发中其实我们可以给用户一些提示,比如上传成功或者上传失败,废话不多说,走码: <!DOCTYPE html> <html lang="en"> &l ...