`

Composite模式

    博客分类:
  • Java
阅读更多

 

定义:将对象以树形结构组织起来,以达成部分-整体的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.

 

 

 

Composite比较容易理解,想到Composite就应该想到树形结构图。组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行。可以用牵一动百来形容。

 

所以Composite模式使用到Iterator模式,和Chain of Responsibility模式类似。

 

Composite好处:

1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。

2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。

 

如何使用Composite?

首先定义一个接口或抽象类,这是设计模式通用方式了,其他设计模式对接口内部定义限制不多,Composite却有个规定,那就是要在接口内部定义一个用于访问和管理Composite组合体的对象们(或称部件Component.

 

 

 

Composite_Model

示例代码:

 

 

package composite_tree;

import java.util.ArrayList;

public abstract class Component {
	public String name;
	public ArrayList<Component> list;
	public abstract void add(Component component);
	public abstract void remove(Component component);
	public abstract void display();
	
	public Component(final String _name) {
		this.name = _name;
	}
}

 

package composite_tree;

public class Leaf extends Component {

	public Leaf(String _name) {
		super(_name);
	}

	@Override
	public void add(Component component) {
		System.out.println("you can't add component to a Leaf object");
	}

	@Override
	public void remove(Component component) {
		System.out.println("you can't remove component to a Leaf object");
	}

	@Override
	public void display() {
		System.out.println("|--" + name);
	}
}

 

package composite_tree;

import java.util.ArrayList;

public class ConcreteComponent extends Component {
	
	public ConcreteComponent(String _name){
		super(_name);
		list=new ArrayList<Component>();
	}

	@Override
	public void add(Component component) {
		list.add(component);
	}

	@Override
	public void remove(Component component) {
		if(list.contains(component)){
			list.remove(component);
		}
	}

	@Override
	public void display() {
		System.out.println(this.name);
		for(Component mc:list){
			mc.display();
		}
	}
}

 

package composite_tree;

public class Client {
	public static void main(String[] args) {
		
		Leaf leaf = new Leaf("计算机学院");
		Leaf leaf2 = new Leaf("文学院");
		//创建一级分类
		ConcreteComponent con = new ConcreteComponent("院系");
		con.add(leaf);
		con.add(leaf2);
		
		Leaf leaf3 = new Leaf("学生会");
		Leaf leaf4 = new Leaf("团总支");
		//创建一级分类
		ConcreteComponent con2 = new ConcreteComponent("校团委");
		con2.add(leaf3);
		con2.add(leaf4);
		
		Leaf leaf5 = new Leaf("报社");
		Leaf leaf6 = new Leaf("外联部");
		//创建二级分类
		ConcreteComponent secondcon = new ConcreteComponent("学生会");
		secondcon.add(leaf5);
		secondcon.add(leaf6);
		
		//在一级分类(校团委)下添加二级分类学生会
		con2.add(secondcon);
		
		//将所有的分类添加到root下
		ConcreteComponent root = new ConcreteComponent("root");
		root.add(con);
		root.add(con2);
		
		//显示节目列表
		root.display();
	}
}

 

结果:

root
院系
|--计算机学院
|--文学院
校团委
|--学生会
|--团总支
学生会
|--报社
|--外联部
 

 

分享到:
评论

相关推荐

    C++ Composite模式

    23种设计模式之八(结构型模式)Composite模式

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

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

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

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

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

    主要介绍了Java设计模式之组合模式(Composite模式)介绍,Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性,需要的朋友可以参考下

    RFC-browser:RFC查看器。 Singleton,Observer,MVC模式以及Command和Composite模式

    RFC浏览器在此RFC浏览器中,您可以: 在顶部的文本字段中按编号查找RFC 如果在顶部的文本字段中输入字符串,则按... 此外,通过Swing库了解Composite模式设计。技术领域Java摇摆汤参考书目抢先设计模式-O'Reilly Media

    设计模式精解-GoF 23种设计模式解析

    2.4 Composite模式 2.5 Flyweight模式 2.6 Facade模式 2.7 Proxy模式 3 行为模式.....55 3.1 Template模式 3.2 Strategy模式 3.3 State模式 3.4 Observer模式 3.5 Memento模式 3.6 Mediator模式 3.7 Command模式...

    36种最新设计模式整理

    Design Pattern: Composite 模式 40 Design Pattern: Decorator 模式 41 Design Pattern: Facade 模式 44 Design Pattern: Flyweight 模式 46 Design Pattern: Proxy 模式(一) 48 Design Pattern: Proxy 模式(二...

    二十三种设计模式【PDF版】

    设计模式之 Composite(组合) 就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于 和单位做买卖。文章中还对 Jive再进行了剖析。 设计模式之 Decorator(装饰...

    设计模式在地图制图软件开发中的应用

    摘要:数字地图制图实际上是...文中从数字地图制图软件的需求出发,对制图软件设计中常用设计模式(包括MVC模式、OBSERVER模式、COMPOSITE模式、COMMAND模式)的一般原理和结构进行简要介绍,并通过实例进行具体的说明。

    C#设计模式.PDF

    九、 一个实际应用Composite模式的例子 98 C#设计模式(12)-Decorator Pattern 101 一、 装饰(Decorator)模式 101 二、 装饰模式的结构 102 三、 装饰模式示例性代码 103 四、 装饰模式应当在什么情况下使用 106...

    C#设计模式大全

    九、 一个实际应用Composite模式的例子 C#设计模式(12)-Decorator Pattern 一、 装饰(Decorator)模式 二、 装饰模式的结构 三、 装饰模式示例性代码 四、 装饰模式应当在什么情况下使用 五、 装饰模式...

    敏捷软件开发:原则、模式与实践

    第23章 COMPOSITE模式 第24章 OBSERVER模式—回归为模式 第25章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第26章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第27章 案例研究:气象站 第六部分 ETS...

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

    将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。

    Composite.rar

    设计模式中的Composite模式,VC源码Composite.rar,希望我能把23个模式写全,O(∩_∩)O~

    ASP.NET设计模式-杨明军译(源码)

    5.2.2 Composite模式 5.2.3 Layer Supertype模式 5.3 应用设计原则 5.3.1 依赖倒置原则和依赖注入模式 5.3.2 接口分离原则 5.3.3 里氏替换原则 5.4 小结 第6章 服务层 6.1 服务层介绍 6.1.1 SOA 6.1.2 ...

    敏捷软件开发:原则、模式与实践.pdf

    第二十三章 COMPOSITE模式 第二十四章 OBSERVER模式——回归为模式 第二十五章 ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 第二十六章 PROXY模式和STAIRWAY TO HEAVEN模式:管理第三方API 第二十七章 案例研究:...

    C#23种设计模式_示例源代码及PDF

    ”“……”,MM 都会用 Composite 模式了,你会了没有? 合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的...

    敏捷软件开发原则、模式与实践 C#版

    第26章 薪水支付案例研究:第一次迭代开始 第27章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第28章 包和组件的设计原则 第29章 FACTORY模式 第30章 薪水支付案例研究:包分析 第31章 COMPOSITE模式 第32章...

    Java Bug模式详解

    第9章 Dangling Composite模式 9.1 Dangling Comp osite bug模式简述 9.1.1 症状 9.1.2 起因 9.1.3 解决方法和预防 措施 9.2 小结 第10章 Null Flag模式 10.1 Null Flag bug模式简述 10.1.1 症状 10.1.2 ...

Global site tag (gtag.js) - Google Analytics