分類
結構型模式。
這個模式在解決什麼
組合模式用來處理樹狀結構。它想解決的是:當單個對象和一組對象都應該被「當成一個節點來處理」時,如何提供統一的操作方式。
核心做法
做法是把系統中的元素分成兩種:
- 葉子節點:不再包含子節點
- 組合節點:內部持有多個子節點
但對外兩者都實作同一組接口。這樣客戶端就可以不區分「這是一個單體」還是「這是一組東西」,直接統一調用。
什麼時候適合用
只要資料天然帶有嵌套關係,就很容易想到組合模式,例如:
- UI 節點樹
- 場景節點樹
- 檔案與資料夾
- 分支對話
例子
如果一段對話既可能是一句單獨台詞,也可能是一個帶分支的對話節點,那就很適合用組合模式。
單句台詞可以是葉子節點,而某個分支下包含多個後續選項時,就把它當成組合節點。外部只需要對「節點」做操作,不必為單句和分支寫兩套流程。
類圖

這一篇先記住的重點
- 組合模式的核心,是讓單體與集合都能被統一看待
- 它非常適合樹狀資料結構
- 客戶端通常只依賴抽象節點接口,而不區分葉子與組合
參考書目
《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates