組合模式

Composite Pattern

允許將對象組合成樹形結構來表現整體/部分層次結構。

組合能讓客戶以一致的方式處理個別對象以及對象組合。

Example: 生物分類學


組合模式會將類別分為兩類:
分別是枝節點類別 (Composite)葉節點類別 (Leaf)

其中葉節點類別沒有子節點。


根據組合介面 (Component) 設計的不同,又可分出兩種類型。

  • 透明方式 (uniformity)
    於介面宣告管理子物件的方法 (Add, Remove),
    使得 枝節點類別 (Composite)葉節點類別 (Leaf) 沒有區別。
    缺點為 葉節點類別 (Leaf) 本身不具備管理子物件的方法,實現它是沒有意義的。

  • 安全方式 (type safety)
    不於介面宣告管理子物件的方法,而是在 枝節點類別 (Composite) 中宣告。
    缺點為客戶端調用時須增加對應的判斷。


優點
面對樹形架構時,能夠使用多態性遞迴性的作法。

缺點
由於介面須同時滿足枝節點與葉節點,會使程式碼複雜度提高。


與其他模式的比較:

[迭代器模式]:
運用組合模式,可以與迭代器模式產生良好的協同作用。

[解譯器模式]:
兩者有著類似下表的對應關係。

解譯器模式 組合模式
終端表達式 (Terminal Expression) 葉節點類別 (Leaf)
非終端表達式 (NonTerminal Expression) 枝節點類別 (Composite)

[裝飾者模式]:
裝飾者模式只有一個裝飾過後的物件。
而組合模式有著許多個物件。


ʕ •ᴥ•ʔ:組合模式的目的就是實現樹形結構。