15 組合模式

2021-10-07 08:21:07 字數 1753 閱讀 7981

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

組合模式uml結構圖:

組合模式的實現根據所實現介面的區別分為兩種形式,分別稱為安全模式和透明模式。組合模式可以不提供父物件的管理方法,但組合模式必須在合適的地方提供子物件的管理方法(諸如:add、remove、display等)。

透明方式:在component(父類)(零件類)裡面宣告所有的用來管理子類物件的方法,包括add()、remove(),以及display()方法。

優點:所有的構件類都有相同的介面。在客戶端看來,樹葉類物件與組合類物件的區別起碼在介面層次上消失了,客戶端可以同等的對待所有的物件。這就是透明形式的組合模式。

缺點:不夠安全,因為樹葉類物件和合成類物件在本質上是有區別的。樹葉類物件不可能有下乙個層次的物件,因此add()、remove()以及display()方法沒有意義,在編譯時期不會出錯,而會在執行時期才會出錯。

安全方式:在composite類(子類)(總體類)裡面宣告所有的用來管理子類物件的方法。

優點:這樣的做法是安全的做法 ,樹葉型別的物件根本就沒有管理子類物件的方法,因此,如果客戶端對樹葉類物件使用這些方法時,程式會在編譯時期出錯。

缺點 :不夠透明,樹葉類和合成類將具有不同的介面。

組合模式何時使用:需求中是體現部分與整體層次的結構時,希望使用者忽略組合物件與單個物件的不同,統一的使用組合結構中的所有物件時。

組合模式優點:

定義了包含基本物件和組合物件的類層次結構,基本物件可以組合成組合物件,組合物件又能組合成更複雜的組合物件,可以不斷地遞迴組合下去,從而構成乙個統一的組合物件的類層次結構,統一了組合物件和葉子物件,簡化了客戶端呼叫,不用區分組合物件和葉子物件,更容易擴充套件,由於客戶端是統一的面對component來操作,因此,新定義的composite或leaf子類能夠很容易的與已有的結構一起工作,而不需改變客戶端。

組合模式缺點:很難限制組合中的元件型別:這是容易新增新的元件帶來的問題,在需要檢測元件型別的時候,使得我們不能依靠編譯期的型別約束來完成,必須在執行期間動態檢測。

組合模式本質:讓客戶統一使用葉子物件(單個物件)和組合物件。

基本**:

abstract class component

public abstract void add(component c);

public abstract void remove(component c);

public abstract void display(int depth);

}class composite : component

public override void add(component c)

public override void remove(component c)

public override void display(int depth)}}

class leaf : component

public override void add(component c)

public override void remove(component c)

public override void display(int depth)

}class program

}

15 組合模式

定義 將物件組合成樹形結構以表示 部門 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。適用 當發現需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,同意地適用組合結構中的所有物件時,就應該考慮用組合模式了。asp.net的treevie...

設計模式利劍15 組合模式

定 義 將物件組合成樹形結構以表示 整體 部分 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性 優 點 1 高層模組呼叫簡單 2 節點自由增加 使用場景 1 你想表示物件的部分 整體層次結構 2 你希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。總結 組合...

設計模式 15 組合設計模式

目錄 什麼是組合模式 為什麼要用組合模式 組合模式組成 由每乙個單元節點,組合成乙個整體節點,這種對單個節點的結構儲存和對整體節點的儲存和處理邏輯保持一致的設計模式便是組合設計模式。應用中有很多場景會用到組合模式,例如樹狀儲存的結構,比如多級選單,每一層級選單的處理都可以抽象保持一致。比如企業的組織...