java设计模式之合成模式

原创 2016年08月31日 10:34:41

==============合成模式,一种把对象组装成树结构的模式.为的是突显单独元素在整体中的位置,并且整体中的任何部分,客户端都可以平等调用(同目录和文件的区别)=====

=============安全模式,旨在不让用户调用叶子节点的管理子节点功能(因为叶子节点并没有子节点)==

=============透明模式,旨在方便用户使用,用户并不在意手里的节点是否是叶子节点,直接使用即可==

安全模式代码

/**
 * @类名 Component.java
 * @作者  zx
 * @创建日期 2016年8月31日
 * @描述 安全模式的合成模式
 * @版本 V 1.0
 */
public interface Component {
	void print(String preStr);
}

public class Composition implements Component {

	private List<Component> components = new ArrayList<Component>();
	
	private String name;
	
	public Composition(String name) {
		this.name = name;
	}

	@Override
	public void print(String preStr) {
		System.out.println(preStr +"  " +name);
		if(null != components){
			for (Component component : components) {
				preStr+="  ";
				component.print(preStr);
			}
		}
	}
	
	public void  addChild(Component component){
		components.add(component);
	}

	public void remove(int  index){
		components.remove(index);
	}
	
	public List<Component> getChild(){
		return components;
	}
	
}

public class Leaf implements Component {

	private String name;
	
	
	public Leaf(String name) {
		this.name = name;
	}

	@Override
	public void print(String preStr) {
		System.out.println(name);
	}

}

public class TestMain {
	public static void main(String[] args) {
		Composition root = new Composition("衣服");
		Composition c1 = new Composition("男装");
		Composition c2 = new Composition("女装");
		Leaf l1 = new Leaf("西装");
		Leaf l2 = new Leaf("燕尾服");
		Leaf l3 = new Leaf("旗袍");
		Leaf l4 = new Leaf("晚礼服");
		root.addChild(c1);
		root.addChild(c2);
		c1.addChild(l1);
		c1.addChild(l2);
		c2.addChild(l3);
		c2.addChild(l4);
		root.print("");
	}
}

透明模式的部分代码

/**
 * @类名 Component.java
 * @作者  zx
 * @创建日期 2016年8月31日
 * @描述 透明模式的合成模式
 * @版本 V 1.0
 */
public abstract class Component_lucency {
	
	abstract void print(String preStr);
	
	public void  addChild(Component component){
		throw new RuntimeException("叶子节点无法调用此方法或者子节点未从写此方法");
	}

	public void remove(int  index){
		throw new RuntimeException("叶子节点无法调用此方法或者子节点未从写此方法");
	}
	
	public List<Component> getChild(){
		throw new RuntimeException("叶子节点无法调用此方法或者子节点未从写此方法");
	}
}

两种实现方法的选择

  这里所说的安全性合成模式是指:从客户端使用合成模式上看是否更安全,如果是安全的,那么就不会有发生误操作的可能,能访问的方法都是被支持的。

  这里所说的透明性合成模式是指:从客户端使用合成模式上,是否需要区分到底是“树枝对象”还是“树叶对象”。如果是透明的,那就不用区分,对于客户而言,都是Compoent对象,具体的类型对于客户端而言是透明的,是无须关心的。

  对于合成模式而言,在安全性和透明性上,会更看重透明性,毕竟合成模式的目的是:让客户端不再区分操作的是树枝对象还是树叶对象,而是以一个统一的方式来操作。


版权声明:本文为博主原创文章,未经博主允许不得转载。

《Java设计模式》之合成模式

合成模式 合成模式把部分和整体关系用树结构表示,是属于对象的结构模式。合成模式要对组合的对象进行管理,所以在一定位置给予对象的相关管理方法,如:add(),remove()等.合成模式中对象的管理有...
  • u011225629
  • u011225629
  • 2015年08月16日 09:47
  • 1651

JAVA设计模式初探之组合模式

先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。”    就拿剪发办卡的事情来分析一下吧。    首先,一张卡可...
  • jason0539
  • jason0539
  • 2014年03月31日 08:40
  • 22674

java 合成模式(组合模式)

转自:http://www.cnblogs.com/java-my-life/archive/2012/04/17/2453861.html 在阎宏博士的《JAVA与模式》一书中开头...
  • ltx06
  • ltx06
  • 2015年10月11日 15:04
  • 992

JAVA设计模式之合成模式

合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 合成模式  ...
  • niuma1024
  • niuma1024
  • 2016年09月23日 11:23
  • 78

Java设计模式之合成模式

合成模式(composite pattern): 允许你将对象组合成树形结构来表现”整体/部分”层次结构. 合成模式能让客户以一致的方式处理个别对象以及对象组合....
  • Jsagacity
  • Jsagacity
  • 2018年01月13日 17:39
  • 42

实例探索Java模式之路——合成模式

合成模式 1、合成模式属于对象的结构模式,又叫做部分—整体模式。合成模式将对象组织到树结构中,用来描述整体与部分的关系。合成模式使客户端将单纯元素与复合元素同等看待。 2、基于继承...
  • dingjianmin
  • dingjianmin
  • 2017年06月09日 21:15
  • 245

读秦小波《设计模式之禅》 -- 工厂模式

设计模式是一种非常有用的编程技巧,它对于代码的重构有些非常重要的作用,对于软件开发人员来说,需要理解并尝试着使用这些设计的方法。      个人感觉《设计模式之禅》这本书中讲解的非常具体,每个模式都配...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2014年12月25日 08:36
  • 2720

设计模式之禅学习笔记--策略模式

一、定义 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换(实现相同的接口)。 二、通用类图 策略模式使用的就是面向对象的继承和多态机制,非常容易理解和掌握。 1:C...
  • xiang912
  • xiang912
  • 2015年05月14日 23:22
  • 613

java设计模式之美

设计模式的概述设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。我们在项...
  • li741350149
  • li741350149
  • 2016年12月14日 08:23
  • 475

(八)Java设计模式之合成模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述合成(Composite)模式的:  合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分...
  • zbdxcyg
  • zbdxcyg
  • 2017年10月20日 13:11
  • 71
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之合成模式
举报原因:
原因补充:

(最多只允许输入30个字)