java组合模式

import java.util.ArrayList;

import java.util.List;

/**
 * Created by yushuang3 on 17/2/8.
 */

public class TestComposePattern {

    public static void main(String [] args){
        Component c = new Composite("根节点");
        Component child = new Composite("一级节点child");
        Component child_1 = new Leaf("一级节点child之子节点1");
        Component child_2 = new Leaf("一级节点child之子节点2");
        child.add(child_1);
        child.add(child_2);
        c.add(child);
        Component leaf = new Leaf("一级节点之叶子节点");
        c.add(leaf);
        Component child2 = new Composite("一级节点child2");
        c.add(child2);
        c.foreach();

    }
}

abstract class Component {

    String name;

    public Component(String name) {
        this.name = name;
    }

    public abstract void add(Component c);

    public abstract void remove(Component c);

    public abstract void foreach();

}

class Composite extends Component {

    private List child= new ArrayList();

    public Composite(String name){
        super(name);
    }

    @Override
    public void add(Component c){
        child.add(c);
    }

    @Override
    public void remove(Component c){
        child.remove(c);
    }

    @Override
    public void foreach() {
        System.out.println("节点名:" + name);
        for(Component c : child){
            c.foreach();
        }
    }
}

class Leaf extends Component {

    public Leaf(String name){
        super(name);
    }

    @Override
    public void add(Component c){

    }

    @Override
    public void remove(Component c){

    }

    @Override
    public void foreach(){
        System.out.println("tself name-->"+this.name);
    }
}

总结:
什么情况下使用组合模式:
引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

转自:
《java与模式》之组合模式

你可能感兴趣的:(java,设计模式,设计模式)