`
samsongbest
  • 浏览: 171522 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

6 合成(Composite)模式

 
阅读更多

1.含义

合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。

 

2.类图

安全式和透明式的合成模式


安全式的合成模式:

叶子节点中没有管理聚集的方法,只有合成对象里才有。


透明式的合成模式:管理聚集的方法被移动到了接口中,叶子和合成对象都有这些方法,相对透明但不安全,叶子并不需要那些方法,一般实现了也是空方法体。


 

3.类代码

安全式的

/*
 * 抽象构件角色
 */
public interface Component {
	Composite getComposite();

	void sampleOperation();
}


/*
 * 树枝构件角色
 */
public class Composite implements Component {
	private Vector componentVector = new java.util.Vector();

	public Composite getComposite() {
		return this;
	}

	public void sampleOperation() {
		Enumeration e = components();
		while (e.hasMoreElements()) {
			((Component) e.nextElement()).sampleOperation();
		}
	}

	public void add(Component c) {
		componentVector.addElement(c);
	}

	public void remove(Component c) {
		componentVector.removeElement(c);
	}

	public Enumeration components() {
		return componentVector.elements();
	}
}


/*
 * 树叶构件角色
 */
public class Leaf implements Component {
	public void sampleOperation() {
	}

	public Composite getComposite() {
		return null;
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		Composite c = new Composite();
		Leaf l = new Leaf();
		c.sampleOperation();
		l.sampleOperation();
		c.add(c);
	}
}
 

 

透明式的

/*
 * 抽象构件角色
 */
public interface Component {
	void sampleOperation();

	Composite getComposite();

	void add(Component c);

	void remove(Component c);

	Enumeration components();
}


/*
 * 树枝构件角色
 */
public class Composite implements Component {
	private Vector componentVector = new java.util.Vector();

	public Composite getComposite() {
		return this;
	}

	public void sampleOperation() {
		Enumeration e = components();
		while (e.hasMoreElements()) {
			((Component) e.nextElement()).sampleOperation();
		}
	}

	public void add(Component c) {
		componentVector.addElement(c);
	}

	public void remove(Component c) {
		componentVector.removeElement(c);
	}

	public Enumeration components() {
		return componentVector.elements();
	}
}


/*
 * 树叶构件角色
 */
public class Leaf implements Component {
	public void sampleOperation() {
	}

	public Composite getComposite() {
		return null;
	}

	public void add(Component c) {
	}

	public void remove(Component c) {
	}

	public Enumeration components() {
		return null;
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		Composite c = new Composite();
		Leaf l = new Leaf();
		c.sampleOperation();
		l.sampleOperation();
		c.add(c);
		l.add(c);
	}
}

 

z

  • 大小: 26.2 KB
  • 大小: 78.8 KB
  • 大小: 84 KB
分享到:
评论

相关推荐

    设计模式之合成模式Java实现和类设计图

    合成模式(Composite Pattern)是软件工程中的一种设计模式,它属于结构型模式,主要用于处理对象的组合。在合成模式中,我们能够将简单对象和组合对象以统一的方式进行操作,这样用户就可以忽略对象的复杂性,而...

    学习php设计模式 php实现合成模式(composite)

    - 装饰器模式(Decorator):常与Composite模式结合,共享相似的接口,用于动态增加对象功能。 - 享元模式(Flyweight):共享组件,但不引用其父组件。 - 迭代器模式(Iterator):用于遍历Composite中的对象。 ...

    24种设计模式介绍与6大设计原则

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...6、合成复用原则(Composite Reuse Principle) 原则是尽量使用合成/聚合的方式,而不是使用继承。

    Java设计模式(泡妞经典版)

    Composite 模式可以使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 例如,在 Composite 模式的例子中,可以使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 9. ...

    Java 设计模式

    java的设计模式大体上分为三大类: ...6、合成复用原则(Composite Reuse Principle)  原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

    Java与模式 学习

    Java与模式:迭代子(Iterator)模式、合成(Composite)模式、抽象工厂模式等

    JAVA与模式

    ### JAVA与模式之合成模式详解 #### 一、引言 在阎宏博士的经典著作《JAVA与模式》中,合成模式被详细介绍并解释为一种重要的设计模式,它属于对象的结构模式之一,常被称为“部分—整体”模式。合成模式通过树形...

    Delphi模式编程第一分卷

    第11章 合成模式(Composite) 2 11.1 模式解说 11.2 结构和用法 11.2.1 模式结构 11.2.2 代码模板 11.2.3 问题讨论 11.3 范例与实践 11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 第12章 ...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第5章 合成(composite)模式 39 第6章 桥接(bridge)模式 52 第7章 职责型模式介绍 62 第8章 单例(singleton)模式 67 第9章 观察者(observer)模式 72 第10章 调停者(mediator)模式 85 第11章 代理(proxy)模式 97 第12...

    设计模式学习笔记总结

    1. **合成(Composite)模式**:合成模式允许我们构建树形结构来表示部分-整体的关系。在C#中,它常用于构建分层的复杂对象,使得用户可以统一处理单个对象和对象组合,提供了“一视同仁”的操作接口。 2. **桥梁...

    C#设计模式结构型

    在结构型设计模式中,合成模式(Composite)和享元模式(Flyweight)是两个重要的模式。 首先,我们来讨论合成模式。合成模式,又称为组合模式,它允许将对象组合成树形结构来表示整体/部分的层次结构。这种结构...

    Delphi模式编程第二分卷

    第11章 合成模式(Composite) 2 11.1 模式解说 11.2 结构和用法 11.2.1 模式结构 11.2.2 代码模板 11.2.3 问题讨论 11.3 范例与实践 11.3.1 合成模式在组织机构管理系统中的应用 11.3.2 范例小结 ...

    composite-image:画布合成画

    3. `context.globalCompositeOperation`:设置或返回当前的合成模式,这决定了新图像如何与画布上的已有图像结合。例如,"source-over"表示新图像覆盖旧图像,"multiply"则是将新图像与旧图像相乘等。 4. `canvas....

    Java中23种设计模式详解

    7. 合成模式(Composite) 合成模式将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户对单个对象和复合对象的使用具有一致性。 8. 装饰模式(Decorator) 装饰模式动态地给一个对象添加一些...

    JAVA常用设计模式详解大全.doc

    8. 合成模式(Composite Pattern) 合成模式是一种结构模式,提供了一种将对象组合成树形结构的方式,使得客户端可以统一地对待单个对象和对象组合。合成模式的优点是可以实现对象的组合和递归,提高了代码的可读性...

    设计模式精心总结

    6. 合成复用原则(Composite Reuse Principle):尽量使用合成/聚合的方式,而不是继承。 在面向对象编程中,以上的设计模式和原则,是开发高质量、易维护、可扩展的软件系统的重要工具和指导思想。

    23种设计模式

    6. 合成复用原则(Composite Reuse Principle):优先使用对象的组合/聚合,而不是继承,以减少类之间的耦合。 【Java中的23种设计模式】 每种设计模式都有其独特的应用场景和优缺点。例如: 1. 工厂方法模式...

    Java 23种设计模式通解

    6. 合成复用原则(Composite Reuse Principle):原则是尽量使用合成/聚合的方式,而不是使用继承。 Java 23种设计模式的详细实现: 1. 工厂方法模式(Factory Method):分为三种,普通工厂模式、多态工厂模式和...

Global site tag (gtag.js) - Google Analytics