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

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
分享到:
评论

相关推荐

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

    设计模式_组合模式.zip

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

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    java.设计模式大作业 薪资交付系统

    10. **组合模式**:在组织架构中,可能会有部门和员工的层级结构,组合模式可以用来表示这种树形结构,方便统一处理部门和员工的薪资计算。 以上设计模式的运用将有助于实现一个模块化、可扩展的薪资交付系统。在...

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

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

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

    ### 设计模式实验报告——组合模式 #### 实验目的与背景 本次实验旨在通过实践学习设计模式中的组合模式,理解其工作原理及应用场景。组合模式(Composite Pattern)是一种结构型设计模式,它允许用户将对象组合成...

    设计模式之组合模式

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

    JavaScript设计模式.pdf

    单体模式是JavaScript中最基本的设计模式之一。它的主要作用是提供一个命名空间,减少全局变量的数量,避免代码冲突,并组织代码使其易于维护。单体模式可以用来划分命名空间,组织代码和避免代码冲突。 2. 工厂...

    python实现23种设计模式.设计模式python语言版

    资源中包含的"23种设计模式.jpg"可能是设计模式的图表或总结,可以帮助理解和记忆各种模式。而"python爬虫js加密解密系列文章合集-云栖社区-阿里云.url"可能是一个链接,指向有关Python爬虫中使用设计模式解决JS加密...

    深入理解JavaScript系列.chm

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

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

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

    设计模式复习题.doc

    8. 设计模式的设计模式: - MVC 模式 - Proxy 模式 - Factory 模式 - Singleton 模式 - Observer 模式 9. 设计模式的常见问题: - 如何选择合适的设计模式 - 如何实现设计模式 - 如何避免设计模式的常见...

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

    ### Java 23种设计模式之组合模式 #### 模式概述 组合模式是一种结构型设计模式,主要用于处理树形结构中的对象集合问题。通过这种模式,我们可以将多个对象组织成树形结构来表示“整体-部分”的层级关系,并允许...

    java 23种设计模式.zip

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

    C#23种设计模式【完整】.pdf

    9. 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。 10. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,使得子系统更加易于使用...

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

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

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

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

    软件设计模式(java版)习题答案.pdf

    * 结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。 * 行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。 设计模式的优点 1. 设计模式融合了众多专家的经验,并以一种...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

Global site tag (gtag.js) - Google Analytics