java设计模式--组合模式

来源:互联网 发布:监控软件手机版 编辑:程序博客网 时间:2024/06/06 16:53

        组合模式就是将对象组合成树状结构,主要由抽象组件类或者接口、组合组件以及叶子组件组成。

1. 抽象组件类(也可以用接口来实现)

package demo.design.zuhe;
//抽象组件类或接口
public abstract class  Component {
    protected String name;
    public Component(String s){
        this.name = s;
    }
    public abstract void add(Component c);
    public abstract void remove(Component c);
    public abstract void test();
}

2. 组合组件

package demo.design.zuhe;
import java.util.ArrayList;
import java.util.List;
//组合构件
public class Composite extends Component{
    public Composite(String s) {
        super(s);
    }
    private List<Component> list = new ArrayList<Component>();
    @Override
    public void add(Component c) {
        list.add(c);
    }
    @Override
    public void remove(Component c) {
        list.remove(c); 
    }
    @Override
    public void test() {
        System.out.println("节点名:\t" + this.name);
        for (Component c : list) {
            c.test();
        }
    }
}

3. 叶子组件

package demo.design.zuhe;
//叶子构件
public class Leaf extends Component{
    public Leaf(String name) {
        super(name);
    }
    //叶子没有不用实现add 和 remove 方法。
    @Override
    public void add(Component c) {
    }
    @Override
    public void remove(Component c) {
    }
    @Override
    public void test() {
        System.out.println("执行方法!"+ this.name);
    }
}


4. 测试

package demo.design.zuhe;


public class ComponentTest {
    public static void main(String[] args) {
        Composite root = new Composite("root");
        Component leaf1 = new Leaf("叶子1");
        Component leaf2 = new Leaf("叶子2");
        Composite composite1 = new Composite("组件1");
        Composite composite2 = new Composite("组件2");
        composite1.add(leaf1);
        composite1.add(leaf2);
        root.add(composite1);
        root.add(composite2);
        root.test();
    }
}

5.打印结果

节点名: root
节点名: 组件1
执行方法!叶子1
执行方法!叶子2
节点名: 组件2

       从上例看,叶子节点重写了add 和 remove 的空方法,组合组件才需要添加或者删除叶子组件(组合组件)。组合模式中也可以将 add方法和 remove方法只放到组合组件中。

0 0
原创粉丝点击