什麼是合成模式(Composite)?

世界上並沒有完美的程序,但我們並不因此而沮喪,因爲寫程序就是一個不斷追求完美的過程。

  1. 意圖
    保證客戶端調用單對象與組合對象的一致性。適用:具有相同功能的樹形母子機構。
  2. 類圖
    在這裏插入圖片描述
  3. 實例
public interface Component {
    void sayHello();
}

class Leaf implements Component{
    private String name;
    public Leaf(String name){
        this.name = name;
    }

    @Override
    public void sayHello() {
        System.out.println(name);
    }
}

class Composite implements Component{
    private String name;
    public Composite(String name){
        this.name = name;
    }
    List<Component> componentList = new ArrayList<>();
    @Override
    public void sayHello() {
        System.out.println(name);
    }

    public void addPart(Component component){
        componentList.add(component);
    }
}
  1. 測試
class TestClass{
    public static void main(String[] args){
        Composite composite = new Composite("總部");
        Composite part1 = new Composite("分部1");
        part1.addPart(new Leaf("小分部1"));
        composite.addPart(part1);
        composite.addPart(new Leaf("分部2"));
        composite.addPart(new Leaf("分部3"));

        composite.sayHello();
        composite.componentList.forEach(
                component -> {
                    component.sayHello();
                    if(component instanceof Composite){
                        ((Composite) component).componentList.forEach(Component::sayHello);
                    }
                }
        );

    }
}

運行結果:

總部
分部1
小分部1
分部2
分部3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章