對於樹形結構,當容器物件(如資料夾)的某乙個方法被呼叫時,將遍歷整個樹形結構,尋找也包含這個方法的成員物件(可以是容器物件,也可以是葉子物件,如子資料夾和檔案)並呼叫執行。(遞迴呼叫)
由於容器物件和葉子物件在功能上的區別,在使用這些物件的客戶端**中必須有區別地對待容器物件和葉子物件,而實際上大多數情況下客戶端希望一致地處理它們,因為對於這些物件的區別對待將會使得程式非常複雜。
組合模式描述了如何將容器物件和葉子物件進行遞迴組合,使得使用者在使用時無須對它們進行區分,可以一致地對待容器物件和葉子物件,這就是組合模式的模式動機。
組合模式(composite pattern):將多個物件組合成樹形結構以表示「整體-部分」的層次結構。組合模式使得使用者對單個物件(即葉子物件)和組合物件(即容器物件)的使用具有一致性。
組合模式又可以稱為「整體-部分」(part-whole)模式,屬於物件的結構模式,它將物件組織到樹結構中,可以用來描述整體與部分的關係。
組合模式屬於結構型模式 ,結構中包含以下三種角色:
1、抽象元件(component) :是乙個介面(抽象類),該介面(抽象類)定義了個體物件和組合物件需要實現的關於操作子節點的方法,比如add()、remove()以及getchild()等方法。抽象元件也可以定義個體物件和組合物件用於操作其自身的方法,比如isleaf()方法等 。
2、 composite節點(composite node) :實現component介面的類的例項,composite節點不僅實現component介面,而且可以含有其它composite節點或leaf節點的引用 。
3、 leaf節點(leaf node):實現component介面的類的例項,leaf節點實現component介面,不可以含有其它composite節點或leaf節點的引用,因此,葉節點在實現component介面有關操作子節點的方法時,比如add(),remove()和getchild()方法,可讓方法丟擲乙個異常,也可以實現為空操作 。
模式分析
組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。
同時容器物件與抽象構件類之間還建立乙個聚合關聯關係,在容器物件中既可以包含葉子,也可以包含容器,以此實現遞迴組合,形成乙個樹形結構。
典型的抽象構件角色**:
public abstract class
component
典型的葉子構件角色**:
public
class
leaf
extends
component
public
void
remove
(component c)
public component getchild
(int i)
public
void
operation()
}
典型的容器構件角色**:
public
class
composite
extends
component
public
void
remove
(component c)
public component getchild
(int i)
public
void
operation()
}}
組合模式的優點
◆ 組合模式中包含有個體物件和組合物件,並形成樹形結構,使使用者可以方便地處理個體物件和組合物件 。
◆ 組合物件和個體物件實現了相同的介面,使用者一般不需區分個體物件和組合物件 。
◆ 當增加新的composite節點和leaf節點時,使用者的重要**不需要做出修改 。
適合使用組合模式的情景
◆ 當想表示物件的部分-整體層次結構 。
◆ 希望使用者用一致的方式處理個體物件和組合物件 。
◆ 物件的結構是動態的並且複雜程度不一樣,但客戶需要一致地處理它們。
簡單問題
將軍隊的乙個連隊組成樹形結構,並計算連隊所需要的軍餉。
假設乙個連隊由乙個連長、兩個排長、六個班長和九十個士兵構成(共99人),連長指揮兩個排長,每個排長直接指揮三個班長,每個班長直接指揮15個士兵。連長軍餉5000,排長軍餉4000,班長軍餉2000 ,士兵軍餉1000 。
1、抽象元件
2、composite結點
3、leaf結點
4、 組合模式的使用
組合模式 設計模式 組合模式
1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...
設計模式 組合模式 組合模式使用
目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...
設計模式 組合設計模式
組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...