天天看點

設計模式之組合模式Composite

組合模式也叫合成模式,有時又叫部分-整體模式,主要是用來描述部分與整體的關系,其定義為:将對象組合成樹形結構以表示“部分-整體”的層次結構,使得使用者對單個對象群組合對象的使用具有一緻性。

通用UML圖:

設計模式之組合模式Composite

- Component抽象建構角色,定義參加組合對象的共有方法和樹形,可以定義一些預設的行為或樹形。

- Leaf葉子構件,葉子對象,其下再也沒有其他的分支,也就是周遊的最小機關。

- Composite樹枝構件,樹枝對象,它的作用是組合樹枝節點和葉子節點形成一個樹形結構。

通用代碼:

設計模式之組合模式Composite
設計模式之組合模式Composite
設計模式之組合模式Composite
設計模式之組合模式Composite

組合模式這裡有一個問題,就是對依賴倒轉原則的破壞,這種被稱為安全模式。為了避免這種破壞,可以把樹枝構件的方法都抽象到抽象類中,即透明模式,UML圖如下:

設計模式之組合模式Composite

對于透明模式,也有一個缺點,就是不管葉子對象還是樹枝對象都有相同的結構,通過判斷是getChild的傳回值确認是葉子節點還是樹枝節點,如果處理不當,這個會在運作期出現問題,不是很建議這種方式,但安全模式就不同,它是把樹枝節點和樹葉節點徹底分開,樹枝節點單獨擁有用來組合的方法,這種方法比較安全。

使用場景:

- 維護和展示部分-整體關系的場景,如樹形菜單、檔案和檔案夾管理。

- 從一個整體中能夠獨立出來部分子產品或功能的場景。

- 隻要是樹形結構,而且層次還比較深的場景。

繼續閱讀