1,UML图
安全式的合成模式
抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象定义出公共出的接口及其默认行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。在安全的合成模式里,构件角色并不定义出管理子对象的方法,这一定义由树枝构件对象给出。
树叶构件(Leaf)角色:树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。
树枝构件(Composite)角色:代表参加组合的有下级子对象的对象。树枝构件类给出所有的管理的子对象的方法,如add()、remove()以及components()的声明。
透明式的合成模式
抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象规定一个接口,规范共有的接口及默认行为。这个接口可以用来管理所有的子对象,要提供一个接口以规范取得和管理下层组件的接口,包括add()、remove()以及getChild()之类的方法。
树叶构件(Leaf)角色:代表参加组合的树叶对象,定义出参加组合的原始对象行为。树叶类会给出add()、remove()以及getChild()之类的用来管理子类对象的方法的平庸实现。
树枝构件(Composite)角色:代表参加组合的有子对象的对象,定义出这样的对象的行为。
2, 模式说明
合成模式的实现根据所实现接口的区别分为两种形式,分别称为安全式和透明式。合成模式可以不提供父
对象的管理方法,但是合成模式必须在合适的地方提供子对象的管理方法。在什么地方声明子对象的管理
方法,诸如add()、remove()以及getChild()等就变成了一个值得仔细思考的问题。
对于透明方式: 在Component里面声明所有的用来管理子对象的方法、包括add()、remove(),以及getChild()
方法。这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码
在接口层次上消失了,客户端可以同等地对待所有的对象。这个选择的缺点是不够安全,因为树叶类对象和
合成类对象在本质上是有区别的。树叶类对象不可能有下一层次的对象,因此add()、remove()以及getChild()
方法没有意义,但是在编译时期不会出错,而只会在运行时期才会出错。
对于安全方式:在Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的做法,因为树叶
类型的对象根本就没有管理子类对象的方法,因此,如果客户端对树叶对象使用这些方法时,程序会在编译
时期出错。编译通不过,就不会出现运行时期错误。这个选择的缺点是不够透明,因为树叶类和合成类将具
有不同的接口。
3,模式示例代码
package com.maohao.struct.composite;
public interface Component {
Composite getComposite();
void sampleOperation();
}
package com.maohao.struct.composite;
import java.util.Enumeration;
import java.util.Vector;
public class Composite implements Component {
private Vector componentVector = new Vector();
@Override
public Composite getComposite() {
return this;
}
@Override
public void sampleOperation() {
Enumeration enumeration = components();
while(enumeration.hasMoreElements()) {
((Component)enumeration.nextElement()).sampleOperation();
}
}
public void add(Component component) {
componentVector.addElement(component);
}
public void remove(Component component) {
componentVector.removeElement(component);
}
public Enumeration components() {
return componentVector.elements();
}
}
package com.maohao.struct.composite;
public class Leaf implements Component {
@Override
public Composite getComposite() {
return null;
}
@Override
public void sampleOperation() {
}
}
package com.maohao.struct.composite;
import java.util.Enumeration;
public interface Component2 {
Composite2 getComposite2();
void sampleOperation();
void add(Component2 component);
void remove(Component2 component);
Enumeration components();
}
package com.maohao.struct.composite;
import java.util.Enumeration;
import java.util.Vector;
public class Composite2 implements Component2 {
private Vector componentVector = new Vector();
@Override
public Composite2 getComposite2() {
return this;
}
@Override
public void sampleOperation() {
Enumeration enumeration = components();
while(enumeration.hasMoreElements()) {
((Component2)enumeration.nextElement()).sampleOperation();
}
}
@Override
public void add(Component2 component) {
componentVector.addElement(component);
}
@Override
public void remove(Component2 component) {
componentVector.removeElement(component);
}
@Override
public Enumeration components() {
return componentVector.elements();
}
}
package com.maohao.struct.composite;
public class Leaf2 implements Component {
@Override
public Composite getComposite() {
return null;
}
@Override
public void sampleOperation() {
}
}
4,与其他模式比较
与命令模式的关系:合成模式常常可以应用到命令类的合成上,由几个具体命令类合成宏命令类。
- 大小: 38.5 KB
- 大小: 31.4 KB
分享到:
相关推荐
五、 透明式的合成模式结构 93 六、 透明式的合成模式实现 94 七、 使用合成模式时考虑的几个问题 97 八、 和尚的故事 98 九、 一个实际应用Composite模式的例子 98 C#设计模式(12)-Decorator Pattern 101 一、 ...
1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...
C#设计模式-结构型相关课件 合成模式(Composite) • 设计方案一: 合成模式(Composite) • 设计方案二 合成模式(Composite) • 设计方案一和设计方案二的区别 – 设计方案二使得客户端更不需要关心所需处理的...
五、 透明式的合成模式结构 六、 透明式的合成模式实现 七、 使用合成模式时考虑的几个问题 八、 和尚的故事 九、 一个实际应用Composite模式的例子 C#设计模式(12)-Decorator Pattern 一、 装饰...
3.1.1设计模式 3.1.2创建型模式概述 3.1.3简单工厂模式 3.1.4工厂方法模式 3.1.5抽象工厂模式 3.1.6建造者模式 3.1.7原型模式 3.1.8单例模式 3.2实训实例 3.2.1简单工厂模式实例之图形工厂 3.2.2工厂方法...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元...
合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的关系用树结构表示出来。 合成模 式使得客户端把一个个单独的...
针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...
软件设计模式概述 2GoF 的 23 种设计模式 3UML中的类图及类图之间的关系 4开闭原则 5里氏替换原则 6依赖倒置原则 7单一职责原则 8接口隔离原则 9迪米特法则 10合成复用原则 11创建型模式的特点和分类 12单例模式 13...
设计模式的个人总结教材,适合IT专业人士研究,目录如下: 序言 概念 6 1.1 设计模式的定义 6 1.2 设计模式的作用 6 1.3 设计模式的由来 6 1.4 设计模式的分类 7 1.5 OO设计七原则 7 1.5.1 开-闭原则(OPEN-CLOSED ...
java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...
二、设计模式遵循的原则有6个: 1、开闭原则(Open Close Principle) 对扩展开放,对修改关闭。 2、里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,...
11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 装饰者模式(Decorator) 12.1 模式解说 12.2 结构和用法 12.2.1 模式结构 12.2.2 代码模板 12.2.3 问题讨论 12.3 范例与实践 12.3.1 ...
这种设计模式属于结构模式,因为该模式创建了一组对象的树形结构。 此模式创建一个包含其自己的对象组的类。 此类提供了修改其相同对象组的方法。 我们通过以下示例演示复合模式的使用,在该示例中我们将显示组织的...
11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 装饰者模式(Decorator) 12.1 模式解说 12.2 结构和用法 12.2.1 模式结构 12.2.2 代码模板 12.2.3 问题讨论 12.3 范例与实践 ...
请继续对3中的类,使用桥接模式重新设计,部分类图如下;同时指出如何适应a-e的变化需求. 5. 现有Menu类及相关类,如下图 在显示AppleMenu和WindowMenu时,是以图片的形式显示的;对于ConsoleMenu当然也以图片...
分类 创建模式 工厂模式;建造模式;原始模型模式;单例模式 结构模式 适配器;桥梁模式;合成模式;装饰模式;门面模式;享元模式;代理模式 行为模式 优点 面向界面编程 降低耦合性 增加灵活性
浅析java常用的设计模式(doc 23页) 1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即 可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修 改。如:如何...