`

组合模式——Composite

 
阅读更多

1. Composite 定义

         将对象以树形结构组织起来,以达成“部分 - 整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。

         想到 Composite 就应该想到树形结构图。组合体内这些对象都有共同接口。当组合体一个对象的方法被调用时, Composite 将遍历整个“子树”,寻找同样包含这个方法的对象执行之。

         类似 Chain of Responsibility 模式(责任链)。

 

2. Composite 好处 (目的 ):

         The intent of the COMPOSITE pattern is to let clients treat individual objects and compositions of objects uniformly .

         1. 简化调用:使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关注自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。

         2. 容易组装:更容易在组合体内加入对象部件 . 客户端不必因为加入了新的对象部件而更改代码。

 

3. Composite 缺点

         1. 循环 Cycles

         在实现 Leaf Composite 两个类型的公共方法时,引入“递归 (recursive) ”机制;而“递归”,可能引入“循环 (Cycles) ”的危险。

         A. 对于某些方法,“有限循环 (a definite loop) ”是有意义的;但应该加入相应代码避免“无限循环 (an indefinite loop)

         B. 对于某些方法,循环导致“无意义”——例如, maxNumOfSteps()

         C. 不能保证 composites 的对象结构是 Tree ,因此不能保证节点只有一个双亲节点

        

 

4. Composite 使用 方法:

         When you model a composite, two powerful concepts emerge:

                   1) Design groups so that they can contain either individual items or other groups.

                   2) Define behaviors common to both individual objects and compositions.

 

         4.1   Composite Class Diagram:

 

图4.1 Composite设计模式

 

 

         4.2   假设 Composites 的对象结构为 Tree ,一个简单的例子实现 Composite 模式

         getMachineCount() 方法实现

 

         4.3   考虑到 Composites 的对象结构可能为 Tree ,有向无环图 DAG ,但更有可能为含有环的有向图

         boolean isTree(Set) 方法实现

         客户端均用 isTree() 调用

 

图4.2 4.3 Composite模式实例

 

*******************************************************************************

参见《设计模式》(板桥里人 http://www.jdon.com 2002/04/27

参见《 Java 设计模式》 P47 chapter5 composite

  • 大小: 9.1 KB
  • 大小: 27.6 KB
分享到:
评论

相关推荐

    设计模式代码——c#

    9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) ...

    Python设计模式之组合模式原理与用法实例分析

    本文实例讲述了Python设计模式之组合模式原理与用法。...设计模式——组合模式 组合模式(Composite Pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用

    设计模式可复用面向对象软件的基础.zip

    2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor和Composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持多种...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    管理系统java sal源码 [toc] 设计模式 ...Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Pattern)外观模式(Facade Pattern)享元模式(Flyweight Pattern)代理模式(Proxy Pattern)

    design-pattern-java.pdf

    桥接模式-Bridge Pattern 处理多维度变化——桥接模式(一) 处理多维度变化——桥接模式(二) 处理多维度变化——桥接模式(三) 处理多维度变化——桥接模式(四) 组合模式-Composite Pattern 树形结构的处理...

    深入浅出设计模式(中文版)

    4.3CompositePattern(组合模式) 115 4.3.1定义 115 4.3.2组合模式的现实应用——资源管理器 117 4.3.3C#实例——图形树状对象结构 118 4.3.4Java实例——文档格式化 121 4.3.5优势和缺陷 124 4.3.6应用情景 ...

    深入浅出设计模式(中文版电子版)

    4.3CompositePattern(组合模式) 115 4.3.1定义 115 4.3.2组合模式的现实应用——资源管理器 117 4.3.3C#实例——图形树状对象结构 118 4.3.4Java实例——文档格式化 121 4.3.5优势和缺陷 124 4.3.6应用情景 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/...

    24种设计模式介绍与6大设计原则

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷2

    pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷7

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷4

    pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 ...

    设计模式Demo

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    C#23种设计模式

    9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器...

Global site tag (gtag.js) - Google Analytics