一.相关例子:
文件系统 ,java.awt.Component
二.UML图:
三.实现方式:
两者的区别在于将所有子类管理方法(诸如add(),remove(),getChild()等方法)放在哪
1.安全式:在Composite类中声明了所有的子类管理方式,可惜这种方法不够透明,Leaf类和Composite类不具有相同的接口
2.透明式:在Component中声明了所有的子类管理方法,可惜这种方法不安全,因为让Leaf"有机会"去处理那些他不该执行的方法,诸如getChild();
四.角色和安全式的实现代码:
1.抽象构件(Component):
package com.se.design.component;/* * 这里实现的是安全式的合成模式 * */public interface Component { /* * 返回自己 * */ public Composite getSelf(); /* * Leaf和Composite共有方法 * */ public void commonMethod();}
2.树枝构件(Composite):
package com.se.design.component;import java.util.Enumeration;import java.util.Vector;public class Composite implements Component { // 存放了自己所有的子节点 Vectorcomponents = new Vector (); @Override public Composite getSelf() { return this; } @Override public void commonMethod() { System.out.println("I'm Composite"); Enumeration enumeration = components.elements(); while (enumeration.hasMoreElements()) { ((Component) enumeration.nextElement()).commonMethod(); } } public void add(Component comoponent) { this.components.add(comoponent); } public void remove(Component component) { this.components.remove(component); }}
3.树叶构件:
package com.se.design.component;public class Leaf implements Component { @Override public Composite getSelf() { // TODO Auto-generated method stub return null; } @Override public void commonMethod() { // TODO Auto-generated method stub System.out.println("I'm Leaf"); }}
毕!