`
wangchao_17915566
  • 浏览: 169495 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

了解组合模式

 
阅读更多

      组合模式,一般就是“整体,部分”的概念,在java与模式中举了一个大家经常听过的故事,很形象,从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的内容是:从前有座山......一直这样下去。从这里看出,整体是这个故事,故事里面的故事则是部分。这也是一个简单的组合模式。

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

      组合模式分为安全式和透明式,

     首先看看安全式:

     定义接口

public interface Component {
	 public void sampleOperation();
}

 

树枝构建角色是具体的实现类

public class Composite implements Component {

	private Vector componentVector = new Vector();
	
/**
 * 谋个业务方法
 * */
	public void sampleOperation() {
		Enumeration enumeration = components();
		while (enumeration.hasMoreElements()){
			((Component)(enumeration.nextElement())).sampleOperation();
		}
	}
	/**
	 * 聚集管理方法,增加一个子构建对象
	 * */
	public void add(Component component){
		componentVector.add(component);
//		System.out.println("++++++++++"+componentVector.size());
	}
	/**
	 * 聚集管理方法,删除一个子构建对象
	 * */
	public void remove(Component component){
		componentVector.remove(component);
//		System.out.println("----------"+componentVector.size());
	}
	/**
	 * 聚集管理方法,返回聚集的Enumeration对象
	 * */
	public Enumeration components(){
		System.out.println("**********"+componentVector.size());
		return componentVector.elements();
	}
}

 

这里除基本业务方法外,它增加了,add,与remov方法。此方法可以对子构建进行增加与删除。

树叶构建角色也实现抽象构建角色。

public class Leaf implements Component {

	public void sampleOperation() {
		System.out.println("增加叶子");
	}

}

 

最后通过测试看下

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//操作单一方法
		Leaf l= new Leaf();
		l.sampleOperation();

		//构造根枝
		Composite allc = new Composite();
		//构造次枝
		Composite c1 = new Composite();
		((Composite)allc).add(c1);
		//构造叶子
		((Composite)c1).add(new Leaf());
		((Composite)c1).add(new Leaf());
		((Composite)c1).remove(new Leaf());

		allc.sampleOperation();
	}

}

 

从这个测试看出,在枝节上可以构造枝节,在枝节上可以构造叶子 ,并且可以通过remove方法,去掉枝叶。这个也可以再次创建下一级的枝叶。

 

下来说下几个名词:

抽象构件角色(Component):这是个抽象类,一般就是个接口,它定义出公共接口,安全模式里,构件角色并不定义管理子对象的方法

树叶构件角色(Leaf):树叶对象没有下级,只定义原始对象。

树枝构件角色(Composite):代表参加组合的下级子对象的对象,还定义出了管理方法:add,remove

 

透明式:则是将原来写在composite中的管理方法,写在接口当中,这样实现他时就必须实现这两个管理方法,包括叶子,这样就是说叶子并不能管理树枝,而也有着两个方法,并且客户端可以调用。

 

 

 

分享到:
评论
2 楼 gaolegao2008 2009-02-26  
<div class="quote_div">
<p>      组合模式,一般就是“整体,部分”的概念,在java与模式中举了一个大家经常听过的故事,很形象,从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的内容是:从前有座山......一直这样下去。从这里看出,整体是这个故事,故事里面的故事则是部分。这也是一个简单的组合模式。</p>
<p>      组合模式把整体和部分的关系用树结果表示出来,使得客户端把一个单独的成分对象和复合对象同等对待。</p>
<p>      组合模式分为安全式和透明式,</p>
<p>     首先看看安全式:</p>
<p>     定义接口</p>
<pre name="code" class="java">public interface Component {
public void sampleOperation();
}
</pre>
<p> </p>
<p>树枝构建角色是具体的实现类</p>
<pre name="code" class="java">public class Composite implements Component {

private Vector componentVector = new Vector();

/**
* 谋个业务方法
* */
public void sampleOperation() {
Enumeration enumeration = components();
while (enumeration.hasMoreElements()){
((Component)(enumeration.nextElement())).sampleOperation();
}
}
/**
* 聚集管理方法,增加一个子构建对象
* */
public void add(Component component){
componentVector.add(component);
// System.out.println("++++++++++"+componentVector.size());
}
/**
* 聚集管理方法,删除一个子构建对象
* */
public void remove(Component component){
componentVector.remove(component);
// System.out.println("----------"+componentVector.size());
}
/**
* 聚集管理方法,返回聚集的Enumeration对象
* */
public Enumeration components(){
System.out.println("**********"+componentVector.size());
return componentVector.elements();
}
}</pre>
<p> </p>
<p>这里除基本业务方法外,它增加了,add,与remov方法。此方法可以对子构建进行增加与删除。</p>
<p>树叶构建角色也实现抽象构建角色。</p>
<pre name="code" class="java">public class Leaf implements Component {

public void sampleOperation() {
System.out.println("增加叶子");
}

}
</pre>
<p> </p>
<p>最后通过测试看下</p>
<pre name="code" class="java">public class Client {

/**
* @param args
*/
public static void main(String[] args) {
//操作单一方法
Leaf l= new Leaf();
l.sampleOperation();

//构造根枝
Composite allc = new Composite();
//构造次枝
Composite c1 = new Composite();
((Composite)allc).add(c1);
//构造叶子
((Composite)c1).add(new Leaf());
((Composite)c1).add(new Leaf());
((Composite)c1).remove(new Leaf());

allc.sampleOperation();
}

}</pre>
<p> </p>
<p>从这个测试看出,在枝节上可以构造枝节,在枝节上可以构造叶子 ,并且可以通过remove方法,去掉枝叶。这个也可以再次创建下一级的枝叶。</p>
<p> </p>
<p>下来说下几个名词:</p>
<p>抽象构件角色(Component):这是个抽象类,一般就是个接口,它定义出公共接口,安全模式里,构件角色并不定义管理子对象的方法</p>
<p>树叶构件角色(Leaf):树叶对象没有下级,只定义原始对象。</p>
<p>树枝构件角色(Composite):代表参加组合的下级子对象的对象,还定义出了管理方法:add,remove</p>
<p> </p>
<p>透明式:则是将原来写在composite中的管理方法,写在接口当中,这样实现他时就必须实现这两个管理方法,包括叶子,这样就是说叶子并不能管理树枝,而也有着两个方法,并且客户端可以调用。</p>
<p> </p>
<p> </p>
<p> </p>
</div>
<p> </p>
1 楼 hanjs 2008-12-04  
((Composite)allc).add(c1);  
        //构造叶子  
        ((Composite)c1).add(new Leaf());  
        ((Composite)c1).add(new Leaf());  
        ((Composite)c1).remove(new Leaf()); 

不知道我为何需要进行强制类型转换?都已经是这个类型了

相关推荐

    Headfirst(九)组合模式C++实现代码

    首先,让我们深入了解组合模式的基本概念。它属于结构型设计模式,主要目标是将对象组织成树形结构,使客户能够一致地对待单个对象和对象集合。这通过“透明性”和“安全性”两个原则实现:透明性是指客户无需关心...

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

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

    设计模式C++学习之组合模式(Composite)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够以统一的方式处理单个对象和对象集合。在C++中,组合模式的应用可以帮助我们构建灵活且易于操作的对象层次结构,使得客户端...

    组合模式二叉树,前序、中序、后续,迭代器模式访问遍历

    首先,让我们深入了解**组合模式**。它是一种结构型设计模式,允许我们创建部分-整体层次结构,使得客户代码可以一致地处理单个对象和对象组合。在二叉树的例子中,每个节点都可以视为一个独立的组件(Component),...

    组合模式Demo

    组合模式是一种行为设计模式,它使你能在代码中表示部分-整体层次结构。在组合模式中,你可以将对象组合成树形结构来表现“整体-部分”关系,...通过了解和应用组合模式,开发者可以更好地构建灵活且易于维护的代码。

    uie.rar_多媒体

    首先,让我们深入了解组合模式。在软件设计中,有时我们需要处理的对象可能是树形结构的,如文件系统、组织结构或复杂的UI元素。组合模式提供了一种方式来处理这些结构,使得客户端代码可以统一地对待单个对象(叶子...

    组合模式的实践demo

    组合模式是一种设计模式,属于结构型模式,它允许我们以统一的方式处理单个对象和对象的集合。在组合模式中,我们创建具有类似接口的对象树,这样用户就可以一致地处理单个对象和对象集合,而无需关心它们的具体类型...

    19组合模式.zip

    组合模式是一种设计模式,属于结构型模式,它在对象的集合操作中发挥着重要作用。这种模式允许我们以统一的方式处理单个对象和对象的集合,实现了部分与整体的层次结构,使得用户可以对单个对象和组合对象进行一致的...

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

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

    java编写的组合模式例子,建造一个工厂

    通过本案例的学习,我们可以了解到组合模式如何帮助我们在Java中构建层次化的组织结构,并且能够以统一的方式处理单个对象和复合对象。这种方式不仅提高了代码的可扩展性和可维护性,还使得程序结构更加清晰明了。

    java实验策略模式、观察者模式和组合模式.docx

    本次实验旨在通过具体的编程实践,让参与者深入了解并掌握三种重要的设计模式:**策略模式**、**观察者模式**以及**组合模式**。通过具体案例的学习,能够更好地理解这些模式在实际开发中的应用价值。 #### 二、...

    快速了解JAVA设计模式

    - **组合模式**:允许你将对象组织成树形结构来表现“整体/部分”层次结构。 - **外观模式**:提供了一个统一的接口,用来访问子系统中的多个接口。 - **享元模式**:运用共享技术有效地支持大量细粒度的对象。 ...

    简单了解设计模式ppt

    结构型模式处理对象组合和类结构,如外观、适配器、代理、装饰、桥接、组合和享元模式,它们优化了类和对象之间的结构关系。行为型模式涉及对象行为和责任分配,包括模板方法、观察者、状态、策略、职责链、命令、...

    Java设计模式之组合模式(Composite模式)介绍

    组合模式(Composite模式)是一种结构型设计模式,它允许我们以树形结构来组合对象,以便客户端代码可以统一地处理单个对象和对象的集合。这种模式的核心思想是"部分-整体"的层次结构,使得客户端可以透明地操作单个...

    二十三种设计模式的详细解读 让您迅速了解设计模式

    12. **组合模式**:允许将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 13. **装饰模式**:动态地给一个对象添加一些额外的职责。比生成子类更灵活,可以给...

    设计模式Java版

    结构型模式则涉及如何组合对象和类,如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式。行为型模式关注对象间职责分配和通信,比如策略模式、模板方法模式、观察者模式、责任链模式、...

    C#面向对象设计模式纵横谈 12种设计模式

    本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...

Global site tag (gtag.js) - Google Analytics