1. 程式人生 > >【JAVA設計模式】9.組合模式

【JAVA設計模式】9.組合模式

目錄即是最經典的組合模式實踐,一個物件由多個物件(可以是自身型別)組合而成,形成一個複雜的物件

UML圖:

首先定義一個總介面,用於定義所有元件,所有元件都實現該介面:

interface IComponent {
    void operation();

    void add(IComponent c);

    void remove(IComponent c);

    IComponent getChild(int i);
}

一個實現該介面的元件,其內部有多個實現IComponent的物件,提供了自身操作方法以及操作內部物件的方法:

class Component implements IComponent {

    private List<IComponent> components = new ArrayList<>();

    private String name;

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

    @Override
    public void operation() {
        System.out.println("I am a component " + name);
        for (IComponent c : components) {
            c.operation();
        }
    }

    @Override
    public void add(IComponent c) {
        components.add(c);
    }

    @Override
    public void remove(IComponent c) {
        components.remove(c);
    }

    @Override
    public IComponent getChild(int i) {
        return components.get(i);
    }

}

在客戶端中通過呼叫add和remove方法對component中的components列表進行修改,從而生成一個樹狀的結構:

IComponent component1 = new Component("1");
component1.add(new Leaf("1"));
component1.add(new Leaf("2"));
IComponent component2 = new Component("2");
component2.add(new Leaf("3"));
component2.add(new Leaf("4"));
component2.add(component1);
component2.operation();