組合模式,又叫做「部分-整體模式」,它屬於結構型設計模式,建立了物件組的樹形結構。
定義:將物件組合成樹形結構以表示「部分-整體」的層次關係,使得使用者在對單一物件和組合物件的使用具有一致性。
問題描述:構建乙個樹形結構的複雜物件,並能區分部分和整體的差異,且使用者可以一致性地對它們進行操作。
解決方案:抽象出容器類和葉子類的共有的行為和方法,並分別去實現。
結構圖:
舉個栗子:講乙個總公司、分公司和子公司的故事。。。
總公司由若干個分公司組成,分公司又由若干個子公司組成,總公司、分公司和子公司所共有的行為由新增屬下公司、解除屬下公司、批量新增屬下公司和批量解除屬下公司,將這四種行為抽象出來並分別去操作和實現。具體實現方式如下:
1. 抽象構件類company,包含公司類的共有方法。**如下:
2. 具體容器類headoffice(總公司)和branchoffice(分公司),分別重寫父類company中定義的方法。**如下:
3. 葉子節點類suboffice,注意它沒有子節點,所以它不需要去重寫父類中的方法。**如下:
4. 在類compositefragment中分別例項化各個物件的例項,然後進行相應的操作。核心**如下:
5. 執行後的效果如下:
綜上,容器類及其葉子類的使用方法完全一致,並且新增葉子類和容器類也很方便。
優點:
1. 高層模組呼叫簡單;
2. 節點自由增加。
缺點:
1. 不能限制容器下的葉子型別,因為所有的容器和葉子都繼承自乙個父類或依賴於乙個介面;
2. 容器和葉子的宣告都是實現類,而不是介面,違反了依賴倒置原則。
適用場景:
1. 表示物件的部分-整體的層次結構;
2. 忽略單個物件和組合物件的不同,希望統一使用它們。
設計模式之組合模式
組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...
設計模式之 組合模式
有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...
設計模式之組合模式
組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...