标签:
组合模式定义:将对象组合成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
优点:
1、高层模块调用简单。
2、节点自由添加。
缺点:
树叶和树枝使用是使用的实现类,违背了面向接口编程这一理念,与依赖倒置原则有冲突。
类图如下:
实现代码如下:
Component抽象构件角色:
package com.designpatterns.composite; /** * @author WSYW126 * @version 2016年5月6日下午6:48:31 */ public abstract class Component { public abstract void doSomething(); }
package com.designpatterns.composite; /** * @author WSYW126 * @version 2016年5月6日下午6:52:37 */ public class Leaf extends Component { @Override public void doSomething() { System.out.println("I am leaf!"); } }
package com.designpatterns.composite; import java.util.ArrayList; /** * @author WSYW126 * @version 2016年5月6日下午6:49:35 */ public class Composite extends Component { private ArrayList<Component> list = new ArrayList<>(); public void add(Component component) { list.add(component); } public void remove(Component component) { list.remove(component); } public ArrayList<Component> getChildren() { return this.list; } @Override public void doSomething() { System.out.println("I am branch!"); } }
package com.designpatterns.composite; /** * @author WSYW126 * @version 2016年5月6日下午6:52:53 */ public class Client { public static void main(String[] args) { Composite root = new Composite(); root.doSomething(); Composite branch = new Composite(); Leaf leaf = new Leaf(); root.add(branch); branch.add(leaf); display(root); } //递归遍历树 private static void display(Composite root) { for (Component c : root.getChildren()) { if(c instanceof Leaf){ c.doSomething(); }else { display((Composite)c); } } } }
参考资料:
设计模式之禅
备注:
转载请注明出处
http://blog.csdn.net/wsyw126/article/details/51333823
by WSYW126
标签:
原文地址:http://blog.csdn.net/wsyw126/article/details/51333823