`

组合模式——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++实现(7)——外观模式、组合模式[参照].pdf

    设计模式 C++ 实现(7)——外观模式、组合模式 本文主要介绍了设计模式中的外观模式和组合模式,并使用 C++ 实现了两个模式的示例代码。外观模式提供了一个高层接口,封装了子系统中的复杂结构,使得客户使用起来...

    C++设计模式课件20_Composite_组合模式.pdf

    本篇主要探讨的是结构型模式之一——组合模式。 #### 二、组合模式定义 组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对...

    JAVA设计模式学习10——组合模式

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在JAVA中,组合模式的应用可以帮助开发者更灵活地处理对象间的层次结构,使得客户端代码...

    设计模式实验报告-组合模式.docx

    ### 设计模式实验报告——组合模式 #### 实验目的与背景 本次实验旨在通过实践学习设计模式中的组合模式,理解其工作原理及应用场景。组合模式(Composite Pattern)是一种结构型设计模式,它允许用户将对象组合成...

    实验八:组合模式.rar

    同时,这也是对面向对象设计原则——开闭原则、依赖倒置原则的实践,因为组合模式使得代码对扩展开放,对修改关闭。 在实验中,你可以编写单元测试来验证组合模式的正确性,确保无论是处理单个文件还是整个目录结构...

    设计模式代码——c#

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

    设计模式-Java语言中的应用(pdf)

    结构型模式如适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)和组合(Composite),则关注如何将不同组件组合成更复杂的结构,以实现新的功能。行为型模式如策略(Strategy)、观察者...

    设计模式——JAVA.docx

    - **结构型模式**(共7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 - **行为型模式**(共11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、...

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

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

    组合模式Demo

    组合模式通常包括三个主要角色:叶子节点(Leaf)、组合节点(Composite)和客户端(Client)。叶子节点代表树结构中的基本单位,不具备子节点;组合节点则包含子节点,并可以拥有其他组合节点或叶子节点,实现对子...

    设计模式可复用面向对象软件的基础.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 支持多种...

    设计模式精解——GoF23中设计模式解析

    4. **Composite模式**:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。这种模式适用于处理具有层级关系的对象集合,以及需要动态增加或删除层级中的对象。 ...

    23种 设计模式---面向对象的基本原则

    - 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,提供比继承更...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    2. **结构型模式**:如适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)、组合(Composite)、外观(Facade)和享元(Flyweight)。这些模式处理对象的组合和关系,提供更好的结构和接口,...

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

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

    CompositePractice:设计模式——复合测试

    "复合实践"是指在软件设计中应用复合模式的过程,这主要针对的是面向对象编程中的结构型设计模式之一——复合模式(Composite Pattern)。复合模式允许我们表示部分-整体层次结构,使得客户端代码可以一致地处理单个...

    X-gen PPT下载——《研磨设计模式》 实战

    2. **结构型模式**:如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式处理对象之间的关系...

    design-pattern-java.pdf

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

Global site tag (gtag.js) - Google Analytics