設計模式之組合模式

2021-10-09 13:27:54 字數 1542 閱讀 9704

在現實生活中,存在很多「部分-整體」的關係,例如,大學中的部門與學院、總公司中的部門與分公司、學習用品中的書與書包、生活用品中的衣月艮與衣櫃以及廚房中的鍋碗瓢盆等。在軟體開發中也是這樣,例如,檔案系統中的檔案與資料夾、窗體程式中的簡單控制項與容器控制項等。對這些簡單物件與復合物件的處理,如果用組合模式來實現會很方便。

組合(composite)模式的定義:有時又叫作部分-整體模式,它是一種將物件組合成樹狀的層次結構的模式,用來表示「部分-整體」的關係,使使用者對單個物件和組合物件具有一致的訪問性。

組合模式的主要優點有:

組合模式使得客戶端**可以一致地處理單個物件和組合物件,無須關心自己處理的是單個物件,還是組合物件,這簡化了客戶端**;

更容易在組合體內加入新的物件,客戶端不會因為加入了新的物件而更改源**,滿足「開閉原則」;

其主要缺點是:

設計較複雜,客戶端需要花更多時間理清類之間的層次關係;

不容易限制容器中的構件;

不容易用繼承的方法來增加構件的新功能;

組合模式包含以下主要角色。

抽象構件(component)角色:它的主要作用是為樹葉構件和樹枝構件宣告公共介面,並實現它們的預設行為。在透明式的組合模式中抽象構件還宣告訪問和管理子類的介面;在安全式的組合模式中不宣告訪問和管理子類的介面,管理工作由樹枝構件完成。

樹葉構件(leaf)角色:是組合中的葉節點物件,它沒有子節點,用於實現抽象構件角色中 宣告的公共介面。

樹枝構件(composite)角色:是組合中的分支節點物件,它有子節點。它實現了抽象構件角色中宣告的介面,它的主要作用是儲存和管理子部件,通常包含 add()、remove()、getchild() 等方法。

假如要訪問集合 c0=} 中的元素,其對應的樹狀圖如圖 3 所示。

/// /// 抽象構件

///

inte***ce component

//樹葉構件

class leaf : component

public void add(component c)

public void remove(component c)

public component getchild(int i)

public void operation()

}//樹枝構件

參考:

設計模式之組合模式

組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...

設計模式之 組合模式

有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...

設計模式之組合模式

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...