`
wangkechao.dream
  • 浏览: 44200 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
352630cf-f670-3416-b946-55dec5cd787c
设计模式
浏览量:28980
社区版块
存档分类
最新评论

8.设计模式之组合模式

阅读更多

先看一下结构图


 

2. 如果把Composite模式看成是树形结构的话,那么它主要角色有:

 

  1)抽象构件角色(Component):该角色是一个抽象类,它定义了一些操作增删树叶(Leaf)的操作。

 

  2)树枝构件角色(Composite):树枝上有很多树干,树枝也是树干的一种。

 

  3)树叶构件角色(Leaf):  树枝上的树叶,也就是Component中的具体操作对象【注意没有,因为处在最末端     所有没有add和remove方法】

 3. 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性【我觉得此处要重点理解,但是,我还没有完全理解】

 

好吧,上代码。

example: 某网刊有体育模块和国内新闻模块,体育模块下有CBA和NBA网站;国内新闻模块有上海地区新闻和江苏地区新闻

 

package designpattern.composite;

/**
 * 
 * 定义一个抽象树干类
 * 
 * @author king
 *
 */
public abstract class Component {

	public String name;//组件的名字
	public Component(String name){
		this.name=name;
	}
	//加入组件
	abstract void add(Component component);
	//删除组件
	abstract void remove(Component component);
	//组件方法
	abstract void operation(Component component);
	
}

 

 

package designpattern.composite;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * 树枝角色类
 * 
 * @author king
 *
 */
public class Composite extends Component{

	private List<Component> components = null;
	
	public Composite(String name) {
		super(name);
		components = new ArrayList<Component>();
	}
	
	void add(Component component) {
		components.add(component);
	}

	void remove(Component component) {
		components.remove(component);
	}
	
	//就实现一个打印功能
	void operation(Component component) {
		//枝干节点主要输出自己和自己的子结点
		System.out.println(this.name);
		//如果存在枝节点,则打印枝节点
		for(Component c : components){  
			//递归输出每个子对象  
			 System.out.print("\t");
			 c.operation(c);  
		}
	}
}

 

 

package designpattern.composite;


/**
 * 
 * 叶子角色类
 * 
 * @author king
 *
 */
public class Leaf extends Component {

	public Leaf(String name) {
		super(name);
	}
	void add(Component component) {
		throw new UnsupportedOperationException("叶子角色类不支持这个功能");  
	}

	void remove(Component component) {
		throw new UnsupportedOperationException("叶子角色类不支持这个功能"); 
	}

	//就实现一个打印功能
	void operation(Component component) {
		//叶子结点只要输出自己
		System.out.println("\t"+this.name);
	}

}

 

 

package designpattern.composite;

public class Client {
	public static void main(String[] args) {
		
		Component newsRoot = new Composite("新闻");
		
		Component sportsNews = new Composite("体育新闻");
		
		Component nbaNews = new Leaf("NBA");
		
		Component cbaNews = new Leaf("CBA");
		
		Component nationalNews = new Composite("国内新闻");
		
		Component shanghaiNews = new Leaf("上海");
		
		Component jiangsuNews = new Leaf("江苏");
		
		sportsNews.add(nbaNews);
		sportsNews.add(cbaNews);
		
		nationalNews.add(shanghaiNews);
		nationalNews.add(jiangsuNews);
		newsRoot.add(nationalNews);
		newsRoot.add(sportsNews);
		
		newsRoot.operation(newsRoot);
		
	}

}

 

代码写的比较匆忙,有些地方没有添加注释,抽时间补上吧。

设计模式,任重道远啊。

 

 

返回导航

  • 大小: 5.2 KB
分享到:
评论

相关推荐

    设计模式_组合模式.zip

    这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的...

    设计模式_源代码大全.zip

    设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...

    设计模式之组合模式

    组合模式的例子代码,你值得拥有,好好学习,天天向上咯。

    Java 23种设计模式12组合模式.pdf

    Java 23种设计模式12组合模式.pdf

    深入理解JavaScript系列.chm

    40.设计模式之组合模式 41.设计模式之模板方法 42.设计模式之原型模式 43.设计模式之状态模式 44.设计模式之桥接模式 45.代码复用模式(避免篇) 46.代码复用模式(推荐篇) 47.对象创建模式(上篇) 48.对象创建...

    深入浅出java设计模式(高清中文PDF)

    文件类型为PDF文件,此文档对20多种java设计模式进行了详细讲解,在中文讲解的过程中还附有代码示例给学习者进行参考,使学习者通过实践更容易理解设计模式的原理。 本文档目录: 1.工厂模式 2.单例模式 3.建造...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...

    C#设计模式_设计模式_C#_

    组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器...

    设计模式实验报告-组合模式.docx

    设计模式实验报告

    设计模式之禅之 组合模式

    设计模式之禅之 组合模式 设计模式之禅之 组合模式 设计模式之禅之 组合模式 设计模式之禅之 组合模式

    GoF 23种设计模式的详解与应用

    结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...

    c++设计模式-结构型模式-组合模式

    c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...

    32种设计模式

    C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) ...

    06.设计模式.rar

    总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式...

    设计模式uml.vsdx

    自己看书整理的23种设计模式的类图,集中起来方便看,也在这里保存一下,丢了不好,下面是为…… 1.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...

    java中的设计模式,主要的设计模式

    适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式观察者模式、策略模式、模板模式、责任链模式、解析器模式、迭代子模式 命令模式、状态模式、备忘录模式、访问者模式、中介者模式

    设计模式之迭代器与组合模式

    这份文档以例子的形式讲诉了设计模式之迭代器与组合模式,希望可以帮助学习的人!

    C语音设计模式

    开篇.pdf 继承、封装、多态.pdf 备忘录模式.pdf 工厂模式.pdf ...组合模式.pdf 单件模式.pdf 解释器模式.pdf 享元模式.pdf 迭代器模式.pdf 原型模式.pdf 访问者模式.pdf 命令模式.pdf 责任链模式.pdf

Global site tag (gtag.js) - Google Analytics