設計模式之組合模式

2022-01-28 23:59:44 字數 1614 閱讀 8928

將物件組合成樹形結構以表示「部分整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。

uml類圖:

具體**:

public

class

client

}public

abstract

class

component

void remove(component c) throws

unmarshalexception

component get(

int index) throws

unmarshalexception

}public

class composite extends

component }}

@override

void add(component c) throws

unmarshalexception

list.add(c);

}@override

void remove(component c) throws

unmarshalexception

}@override

component get(

int index) throws

unmarshalexception

return

null

; }

}public

class leaf extends

component

}

模組說明:component(抽象構件):

component是組合中的物件宣告抽象類,在適當的情況下,實現所有類共有介面的預設行為。用於訪問和管理component子部件。

composite(容器構件):

定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等

leaf(葉子構件):

leaf 在組合中表示葉子結點物件,葉子結點沒有子結點

具體例子:

舉個新聞客戶端的例子,選單分類,部門機構的分類,公司部門的分類等等。

應用場景:

描述樹形結構,可以統一操作樹的全部節點,增加刪除獲取等等。

優缺點:

優點:包含了基礎物件和組合物件的層次結構

簡化了客戶端的呼叫,對組合還是子葉不用區分對待。

可以增加子葉,增加了擴充套件性。

缺點:安全性和透明性是個不可調和的矛盾。當然此模式實現更多考慮透明性,對子葉還是元件一視同仁,

這樣相對子葉和組合物件分別處理變得十分困難,需要做型別轉換,這顯然影響安全性。

另外當業務越來越複雜,對元件抽象也是很大的挑戰。

總結:統一了子葉和組合物件的操作。

設計模式之組合模式

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

設計模式之 組合模式

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

設計模式之組合模式

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