组合模式(Composite)属于结构性模式,它描述了对象间的组合关系。
对象间常常通过树结构来组织(包含)起来,以实现整体-部分的层次结构。整体上可以看做是一个组合对象。
抛却各种复杂的术语,组合模式的特点是:
对象通过实现(继承)统一的接口(抽象类),调用者对单一对象和组合对象的操作具有一致性。
组合模式好处:
1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。
如何使用Composite?
首先定义一个接口或抽象类,这是设计模式通用方式了,其他设计模式对接口内部定义限制不多,Composite却有个规定,
那就是要在接口内部定义一个用于访问和管理Composite组合体的对象们(或称部件Component).
从结构图上来看组合模式和装饰模式很相近,相同之处是两种模式都提供了一种组合,装饰模式提供的是一种功能的组合,而组合模式提供的是一种对象组合。不同之处在于装饰模式只维护一个构件的引用,而组合模式中的组合对象提维护的是一个组件池,数量上有区别,这个区别就决定了装饰模式并不能构成树型结构,而组合模式则可以。 从业务逻辑上来讲,装饰模式的使用是为了给构件增加新的行为特征,而组合模式是为了整体-局部的层次型管理。从应用上来讲,组合模式的应用比装饰模式更具一般化,因此使用更广。
另外装饰模式中装饰者和构件并不一定要求同一类对象,在使用上也有区别,而组合模式中的组合对象和叶子对象都是同一类对象,在使用上并无区别。
组合模式的设计方法不仅在程序设计上应用非常广,在业务设计上,数据结构设计上都应用非常广泛。
在使用组合模式时,为了提供更灵活的访问,在接口组件提供对父节点的访问接口,叶子对象和组合对象都会实现这种接口,比如Delphi中Wincontrol类中的Parent属性,C#中Control类中的Parent等。还可以提供对象检索之类的功能。
在具体实现组合模式时,有时候根据需要,组合对象的子对象池只保持一个对子对象的引用,所有的对象会用一个集合来进行管理,这样做的好处主要是为了方便对对象的检索和管理。比如索引对象,释放资源。树型访问有的时候会比较慢。典型应用就是Delphi中的Form类。所有在Form中创建并指定了Owner属性的控件,都在Form的Components列表中。
类图如下:
- 大小: 3.5 KB
分享到:
相关推荐
将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
C++设计模式课件20_Composite_组合模式.pdf
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
设计模式C++学习之组合模式(Composite)
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) 体验课程
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
2.2.3 组合模式 272.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 支持...
- 组合模式(Composite) - 外观模式(Facade) - 享元模式(Flyweight) - 观察者模式(Observer) - 模板方法模式(Template Method) - 策略模式(Strategy) - 责任链模式(Chain of Responsibility) - 中介者模式...
|- singleton 单例模式案例 |- structural(结构型模式) |- facade 外观模式案例 |- decorator 装饰器模式案例 |- adapter 适配器模式案例 |- flyweight 享元模式案例 |- composite 组合模式案例
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)
Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第9节:结构型模式Composite组合模式
组合模式(Composite Pattern)-结构型模式 (0%) <br>讲义书写模式 在实际的讲解中我会用一套模式来讲述我对设计模式的理解 1.给出当前章节模式的名称 2.讲述一个小故事,提出问题 3.回答这个...
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
另外,这也不是一篇高级专题技术论文,而是一本关于设计模式的书,它描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从...
23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...
在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...