design pattern——组合模式
针对问题:组合模式使我们在处理树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
?
?
?
?
组合模式结构图:
?
?
?
?
?
?
组合模式实现代码:
?
/** * 为树叶或树枝抽象一个接口 * @author bruce * */public abstract class Component {public abstract void operation();public void add(Component component){throw new UnsupportedOperationException();}public void remove(Component component){throw new UnsupportedOperationException();}public Component getChild(int index){throw new UnsupportedOperationException();}}/** * 树叶 * @author bruce * */public class Leaf extends Component{private String name;public Leaf(String name){this.name=name;}@Overridepublic void operation() {// TODO Auto-generated method stubSystem.out.println(name);}}/** * 树枝 * @author bruce * */public class Composite extends Component{private List<Component> list=new ArrayList<Component>();private String name;public Composite(String name){this.name=name;}@Overridepublic void operation() {// TODO Auto-generated method stubSystem.out.println(name);/** * for..each 递归调用operation() */Iterator<Component> iterator=list.iterator();while(iterator.hasNext()){Component component=iterator.next();component.operation();}}@Overridepublic void add(Component component) {// TODO Auto-generated method stublist.add(component);}@Overridepublic void remove(Component component) {// TODO Auto-generated method stublist.remove(component);}@Overridepublic Component getChild(int index) {// TODO Auto-generated method stubreturn list.get(index);}}/** * 测试 * @author bruce * */public class Client {public static void main(String[] args) {Component c=new Composite("C:/");Component cl=new Leaf("test.java");Component cc=new Composite("C:/program file/");Component cclA=new Leaf("QQ.exe");Component cclB=new Leaf("360.exe");cc.add(cclA);cc.add(cclB);c.add(cl);c.add(cc);c.operation();/** * output: * C:/test.javaC:/program file/QQ.exe360.exe */}}
?