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设计模式——合成/聚合复用原则

一、什么是合成/聚合复用原则? 合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。 简述为:要尽量使用合成/聚合,尽...

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

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

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

在阎宏博士的《JAVA与模式》一书中开头是这样描述合成(Composite)模式的:  合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分...
  • zbdxcyg
  • zbdxcyg
  • 2017年10月20日 13:11
  • 67

设计模式之合成模式(Java语言描述)

《JAVA与模式》一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成...

java设计模式---合成模式3

实例下面以一个逻辑树为例子,以上面的原理图为蓝本,看看如何实现并如何使用这个树,这个结构很简单,但是如何去使用树,遍历树、为我所用还是有一定难度的。 这里主要用到树的递归遍历,如何递归、如何控制遍历层...

java设计模式总结九:合成模式

合成模式定义合成模式,也叫树形模式,就是把部分和整体的关系通过树形结构来表示,使得客户端对单个对象和组合对象的使用具有一致性合成模式也是继承的另一种替代方法合成模式组成结构合成模式主要由三个部分组成:...

Java设计模式百例 - 合成模式

组合模式(Composite Pattern),又叫部分整体模式,依据树形结构来组合对象,是用来表示部分以及整体层次的一种递归式结构的模式。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。...
  • get_set
  • get_set
  • 2017年12月02日 12:53
  • 29

java读书笔记-《java设计模式》-第5章 - 合成模式

读后感觉合成模式主要用于分析需求、整理逻辑后来设计程序框架,对初学者不太合适。 概念:合成模式的意图是为了保证客户端调用单对象与组合对象的一致性。举个例子来说:对工作进程的定义,可以将其定义为进程步...

设计模式六大原则--合成/聚合复用原则

定义 尽量使用合成/聚合,尽量不要使用类继承。(Design to interfaces;Favor composition over inheritance;Find what var...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之合成模式
举报原因:
原因补充:

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