设计模式之十一:Composite(组合)—对象结构型模式

2014-05-28 星期三 21:41:44 

Composite,继续GOF。

Composite组合模式

1、Intent

Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

将对象组合成树形结构以表示“部分 -整体”的层次结构。 Composite使得用户对单个对象和组合对象的使用具有一致性。

2、Also Known As

3、Motivation

The Composite pattern describes how to use recursive composition so that clients don‘t have to make this distinction.

The key to the Composite pattern is an abstract class that represents bothprimitives and their containers. For the graphics system, this class is Graphic. Graphic declares operations like Draw that are specific to graphical objects. It also declares operations that all composite objects share, such as operations for accessing and managing its children.

Composite模式描述了如何使用递归组合,使得用户不必对这些类进行区别,如下图所示。

Composite模式的关键是一个抽象类,它既可以代表图元,又可以代表图元的容器。在图形系统中的这个类就是 Graphic,它声明一些与特定图形对象相关的操作,例如 Draw。同时它也声明了所有的组合对象共享的一些操作,例如一些操作用于访问和管理它的子部件。

The Picture class defines an aggregate of Graphic objects. Picture implements Draw to call Draw on its children, and it implements child-related operations accordingly. Because the Picture interface conforms to the Graphic interface, Picture objects can compose other Pictures recursively.

The following diagram shows a typical composite object structure of recursively composed Graphic objects:

Picture类定义了一个 Graphic
对象的聚合。 Picture 的D r a w操作是通过对它的子部件调用Draw实现的, Picture还用这种方法实现了一些与其子部件相关的操作。由于 Picture接口与Graphic接口是一致的,因此 Picture对象可以递归地组合其他 Picture对象。下图是一个典型的由递归组合的 Graphic对象组成的组合对象结构。

4、Applicability

Use the Composite pattern when

●  you want to represent part-whole hierarchies of objects.

?●  you want clients to be able to ignore the difference between compositions of objects and individual objects.

Clients will treat all objects in the composite structure uniformly.

以下情况使用Composite模式:

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

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

5、Structure

6、代码

Composite就是把Leaf也“看作”Component。

代码见开首的链接,很直观表述了此模式。

?

来自为知笔记(Wiz)

设计模式之十一:Composite(组合)—对象结构型模式

时间: 2024-08-01 04:09:27

设计模式之十一:Composite(组合)—对象结构型模式的相关文章

设计模式之十四:Decorator(装饰)—对象结构型模式

2014-06-15 星期日 10:42:12  Decorator,继续GOF. 1.Intent Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality 动态地给一个对象添加一些额外的职责.就增加功能来说, Decorator模式相比生成子类更为灵活. 2.A

设计模式之十二:Proxy(代理)—对象结构型模式

2014-05-29 星期四 21:08:37  Proxy,继续GOF.此模式未按GOF编写. c++中使用StringBuilder 1.Intent Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问. 2.Also Known As 3.Motivation 4.Applicability 在以下情况使用适配模式: ● 创建开销大的对象时

设计模式之十三:Flyweight(享元)—对象结构型模式

2014-06-15 星期日 9:35:04  Flyweight,继续GOF. 1.Intent Use sharing to support large numbers of fine-grained objects efficiently. 运用共享技术有效地支持大量细粒度的对象. 2.Also Known As 3.Motivation A flyweightis a shared object that can be used in multiple contexts simultan

(转)Java经典设计模式(2):七大结构型模式(附实例和详解)

原文出处: 小宝鸽 总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 博主的上一篇文章已经提到过创建型模式,此外该文章还有设计模式概况和设计模式的六大原则.设计模式的六大原则是设计模式的核心思想,详情请看博主的另外一篇文章:Java经典设计模式之五大创建模式(附实例和详解). 接下来我们看看结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中适配器模式主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.其中的对象的适配器

设计模式06: Adapter 适配器模式(结构型模式)

Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象不能满足的.如何应对这种“迁移的变化”?如何既能够利用现有对象的良好表现,同时又能满足新的应用环境所要求的接口? 意图(Intent)将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一

设计模式09: Decorator 装饰模式(结构型模式)

Decorator 装饰模式(结构型模式) 子类复子类,子类何其多加入我们需要为游戏中开发一种坦克,除了不同型号的坦克外,我们还希望在不同场合中为其增加以下一种多种功能:比如红外线夜视功能,比如水路两栖功能,比如卫星定位功能等等. 问题代码: /// <summary> /// 抽象坦克 /// </summary> public abstract class Tank { public abstract void Shot(); public abstract void Run(

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

1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成更大的组件.Composite模式描述了如何使用递归组合,使得用户不必对这些类进行区别. 3.适用性 表示对象的部分-整体层次结构. 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象. 4.结构 5.代码实例 #include <memory> #in

Decorator(装饰)-对象结构型模式

1.意图 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 2.别名 包装器 Wrapper. 3.动机 给某个对象而不是整个类添加一些功能.一个较为灵活的方式时将组件嵌入另一个对象中. 4.适用性 在不影响其它对象的情况下,以动态.透明的方式给单个对象添加职责. 处理那些可以撤销的职责. 当不能采用子类的方法进行扩充时.一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长.另一种情况可能是因为类定义被隐藏或

Bridge(桥接)-对象结构型模式

1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 2.动机 在抽象类与它的实现之间起到桥梁作用,使它们可以独立地变化. 3.适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系.这种情况可能是因为,在程序运行时刻实现部分可以被选择或切换. 类的抽象以及它的实现部分都应该可以通过生成子类的方式加以扩充.这时桥接模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充. 对一个抽象实现部分的修改的修改不应该对客户产生影响,即客户代码不必要重新编译. 对客户完全隐藏抽