Composite Pattern
允許將對象組合成樹形結構來表現整體/部分層次結構。
組合能讓客戶以一致的方式處理個別對象以及對象組合。
Example: 生物分類學
組合模式會將類別分為兩類:
分別是枝節點類別 (Composite) 與 葉節點類別 (Leaf) 。
其中葉節點類別沒有子節點。
根據組合介面 (Component) 設計的不同,又可分出兩種類型。
透明方式 (uniformity)
於介面宣告管理子物件的方法 (Add, Remove),
使得 枝節點類別 (Composite) 與 葉節點類別 (Leaf) 沒有區別。
缺點為 葉節點類別 (Leaf) 本身不具備管理子物件的方法,實現它是沒有意義的。安全方式 (type safety)
不於介面宣告管理子物件的方法,而是在 枝節點類別 (Composite) 中宣告。
缺點為客戶端調用時須增加對應的判斷。
優點:
面對樹形架構時,能夠使用多態性與遞迴性的作法。
缺點:
由於介面須同時滿足枝節點與葉節點,會使程式碼複雜度提高。
與其他模式的比較:
[迭代器模式]:
運用組合模式,可以與迭代器模式產生良好的協同作用。
[解譯器模式]:
兩者有著類似下表的對應關係。
解譯器模式 | 組合模式 |
---|---|
終端表達式 (Terminal Expression) | 葉節點類別 (Leaf) |
非終端表達式 (NonTerminal Expression) | 枝節點類別 (Composite) |
[裝飾者模式]:
裝飾者模式只有一個裝飾過後的物件。
而組合模式有著許多個物件。
ʕ •ᴥ•ʔ:組合模式的目的就是實現樹形結構。