`

Composite(组成)---对象结构型模式

阅读更多

Composite使得用户对单个对象和组合对象的使用具有一致性。

Composite模式的关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。

以下情况使用Composite模式:

1、想表示对象的部分-整体层次结构。

2、希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

 

用户使用Component类接口与组合结构的对象进行交互。如果接收者是一个叶节点,则直接处理请求。如果接收者是Composite,它通常将请求发送给它的子部件,在转发请求之前与/或之后可能执行一些辅助操作。

 

Composite模式定义了

1、包含基本对象和组合对象的类层次结构。基本对象可以被被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去。客户代码中,任何用到基本对象的地方都可以使用组合对象。

2、简化客户代码。客户可以一致地使用组合结构和单个对象。通常用户不知道(也不关心)处理的是一个叶节点还是一个组合组件。

3、使得更容易增加新类型的组件。新定义的Composite或Leaf子类自动地与已有的结构和客户代码一起工作。

 

对于父部件引用,必须维护一个不变式,即用一个组合的所有子节点以这个组合为父节点,而反之该组合以这些节点为子节点。仅当在一个组合中增加或删除一个组件时,才改变这个组件的父部件。如果能在Composite类的Add和Remove操作中实现这种方法,那么所有的子类都可以继承这个方法,并且将自动维护这一不变式。

 

最大化Component接口。Composite模式的目的之一是使得用户不知道他噶们正在使用的具体Leaf和Composite类。为了达到这一目的,Composite类应为Leaf和Composite类尽可能多定义一些公共操作。Composite类通常为这些操作提供缺省的实现,而Leaf和Composite子类可以对它们进行重定义。但这个目标有时候可能与类层次结构设计原则相冲突,该原则规定:一个类只能定义那些对它的子类有意义的操作。例如,访问子节点的接口是Composite类的一个基本组成部分,但对Leaf类来说并不必要。但是如果我们把一个Leaf看成是一个没有子节点的Component,就可以为在Component类中定义一个缺省的操作,用于对子节点进行访问,这个缺省的操作不返回任何一个子节点。Leaf类可以使用缺省的实现,而Composite类则会重新实现这个操作以返回它们的子类。

 

Decorator模式经常与Composite模式一起使用。当装饰和组合一起使用时,它们通常有一个公共的父类。

Flyweight模式让你共享组件,但不再能引用它们的父部件。

Iterator模式可用来遍历Composite。

Visitor模式将本来应该分布在Composite和Leaf类中的操作和行为局部化。

分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,具体到第9篇讨论的是“Composite组合模式”。这一模式属于结构型模式的一种,旨在解决...

    c++-设计模式之组合模式(Composite Pattern)

    组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,这种模式常用于需要处理树形结构的数据...

    C++ Composite模式

    Composite模式是设计模式中的一种结构型模式,它允许你将对象组织成树形结构,以表示“部分-整体”的层次结构。在C++中,Composite模式使得客户可以对单个对象和对象组合进行一致的处理,这种模式常用于构建复杂的...

    Composite模式

    **复合模式(Composite Pattern)**是一种结构型设计模式,它允许我们构建复杂的对象结构,并能像操作单个对象一样处理整个结构。在计算机科学中,这种模式尤其适用于表示部分-整体层次结构,使得用户可以一致地处理...

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

    4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 ...

    设计模式 - 可复用面向对象软件的基础(高清版)

    2. 结构型模式:结构型模式主要关注如何组合对象和类,以形成更大的结构。例如,适配器模式(Adapter)用于将不兼容接口转换为兼容接口;装饰模式(Decorator)允许动态地给对象添加新的行为或责任;代理模式(Proxy...

    设计模式:可复用面向对象软件的基础--详细书签版

    4.3 composite(组成)—对象结构型 模式 107 4.4 decorator(装饰)—对象结构型 模式 115 4.5 facade(外观)—对象结构型 模式 121 4.6 flyweight(享元)—对象结构型 模式 128 4.7 proxy(代理)—对象...

    软件体系结构_软件设计模式

    2. 结构型设计模式:这类模式关注如何组合对象和类,以形成更大的结构,如适配器模式(Adapter)、装饰器模式(Decorator)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight...

    组合模式 Composite Pattern

    **组合模式**(Composite Pattern)是一种常用的结构型设计模式,主要用于构建具有层次结构的对象系统。它允许客户端以一致的方式处理单个对象和组合对象,简化了高层模块的调用。通过组合模式,可以将多个对象组织成...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    结构型模式 - **Bridge模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **Adapter模式**:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    结构型模式处理对象和对象之间的关系,这些关系通过继承或者组合来实现,并且可以合成更复杂的结构。 1. **Bridge模式** - **定义**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **应用场景**:...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    结构型模式关注的是如何组织类和对象来形成更大的结构。 - **2.1 Bridge模式**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **应用场景**:如果一个类存在两个独立变化的维度,且这两个维度都需要...

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

    843.6 创建型模式的讨论 89第4章 结构型模式 914.1 Adapter(适配器)—类对象结构型模式 924.2 Bridge(桥接)—对象结构型模式 1004.3 Composite(组成)—对象结构型模式 1074.4 Decorator(装饰)—对象结构型...

    软件设计师必读的书-设计模式

    4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 ...

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

    4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 ...

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

    4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 ...

Global site tag (gtag.js) - Google Analytics