`
liyf155
  • 浏览: 128308 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Composite设计模式

 
阅读更多

     Composite模式属于对象的结构模式,有时候又叫部分-整体模式,它将对象组织到树结构中,把部分与整体的关系用树结构表示出来,例如一个文件系统就是个很典型的Composite模式系统。

     Composite模式的三个角色:

     1 Component(根节点) 为组合中的对象声明接口,在适当情况下,实现所有类共有接口的缺省行为,声明一个接口用于访问和管理Component的子组件

     2 Leaf(树叶),在组合中表示叶节点对象,叶节点没有子节点,也就是说该对象是不存在子对象的

     3 Composite(树枝),定义子部件的某些部件的行为,存储子部件,即该对象存在下级子对象的对象,实现component给出的所有管理子对象的方法

     Composite模式的实现可以不提供对象的管理方法,但是Composite模式必须在合适的地方提供子对象的管理方法,在什么地方声明子对象的管理方法,如:add() remove()等等,这是值得思考的,所以Composite模式可以分成两种形式:透明式和安全式。如图:

安全式代码实现:

package composite;

public interface Component {
	Composite getComposite();
	void sampleOperation();
}

package composite;

public class Leaf implements Component {

	@Override
	public Composite getComposite() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void sampleOperation() {
		// TODO Auto-generated method stub

	}

}

package 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 e = getComponents();
		while(e.hasMoreElements())
		{
			((Component) e.nextElement()).sampleOperation();
		}
	}
	
	public void addComponent(Component c)
	{
		componentVector.add(c);
	}
	
	public void delComponent(Component c)
	{
		componentVector.remove(c);
	}
	
	public Enumeration getComponents()
	{
		return componentVector.elements();
	}

}

 

 

透明式代码实现:

package composite;

import java.util.Enumeration;

public interface Component2 {
	Composite2 getComposite();
	void sampleOperation();
	void addComponent(Component2 c);
	void delComponent(Component2 c);
	Enumeration getComponents();
}

package composite;

import java.util.Enumeration;
import java.util.Vector;

public class Composite2 implements Component2 {
	private Vector componentVector = new Vector();
	
	@Override
	public void addComponent(Component2 c) {
		// TODO Auto-generated method stub
		componentVector.add(c);
	}

	@Override
	public void delComponent(Component2 c) {
		// TODO Auto-generated method stub
		componentVector.remove(c);
	}

	@Override
	public Enumeration getComponents() {
		// TODO Auto-generated method stub
		return componentVector.elements();
	}

	@Override
	public Composite2 getComposite() {
		// TODO Auto-generated method stub
		return this;
	}

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

}

package composite;

import java.util.Enumeration;

public class Leaf2 implements Component2 {

	@Override
	public void addComponent(Component2 c) {
		// TODO Auto-generated method stub

	}

	@Override
	public void delComponent(Component2 c) {
		// TODO Auto-generated method stub

	}

	@Override
	public Enumeration getComponents() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Composite2 getComposite() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void sampleOperation() {
		// TODO Auto-generated method stub

	}

}

 

显然,透明式是不够安全的,因为树叶类对象和树枝(Composite)类对象是有实质的区别的;而安全式虽然够安全,但是却不够透明,因为树叶类和树枝类具有不同的接口,所以,在使用哪种Composite模式时,需要根据软件的具体情况对这两种形式做取舍。

 

 

 

  • 大小: 78.7 KB
1
1
分享到:
评论

相关推荐

    设计模式之组合模式(Composite Pattern)

    组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...

    常见设计模式的解析和实现(C++)之六

    Composite设计模式是一种结构型模式,其主要目标是将简单对象和复杂对象组合成树形结构,使得它们可以被一致地处理。在C++中,Composite模式通常用于构建具有类似操作的分层或树状数据结构。它允许我们对单个对象和...

    人人都懂设计模式 人人都懂设计模式

    人人都懂设计模式 设计模式是软件开发中的一种解决方案,它提供了一种通用的设计思想和方法论,可以帮助开发者更好地设计和实现软件系统。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 在本书中...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    ### C#面向对象设计模式纵横谈之Composite组合模式解析 #### 标题解析与核心概念 标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,...

    24种设计模式以及混合设计模式

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在本文中,我们将深入探讨24种设计模式,并结合混合设计模式的概念,以及它们在实际项目中的应用案例。 首先,设计...

    JAVA设计模式chm文档

    设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...

    JavaScript设计模式与开发实践.pdf

    第二部分是核心部分,通过一步步完善的代码示例,由浅入深地讲解了16个设计模式,包括 singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、...

    C++设计模式课件20_Composite_组合模式.pdf

    组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对单个对象和组合对象进行一致性的操作处理,即客户程序可以像操作单个对象...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 单最常用的设计模式入门,比如AbstractFactory模式、Adapater模式、Composite模式、Decorator模式、Factory模式、Observer模式、Strategy模式、Template模式等

    设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...

    Composite模式

    **复合模式(Composite Pattern)**是一种结构型设计模式,它允许我们构建复杂的对象结构,并能像操作单个对象一样处理整个结构。在计算机科学中,这种模式尤其适用于表示部分-整体层次结构,使得用户可以一致地处理...

    23种面向对象设计模式

    面向对象设计模式是软件开发中的一种重要思想,它通过总结和提炼在软件设计过程中常见的问题和解决方案,形成了可复用的设计规范。标题提到的“23种面向对象设计模式”涵盖了设计模式的主要分类,这些模式在Java、...

    Head.First设计模式_PDF

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Template Method、iterator、Composite、State、proxy。最后三章比较...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    《Java设计模式》课后答案-刘伟.rar

    结构型设计模式包括适配器(Adapter)、桥接(Bridge)、装饰(Decorator)、外观(Facade)、享元(Flyweight)、组合(Composite)和代理(Proxy)。这些模式帮助我们更好地组织类和对象之间的关系,实现松耦合,...

    JavaScript设计模式.pdf

    JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...

    设计模式文档 chm

    设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...

Global site tag (gtag.js) - Google Analytics