常用軟體設計模式(五)組合模式

2021-08-29 05:16:36 字數 2485 閱讀 5229

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

優點:

組合模式使得客戶端**可以一致地處理物件和物件容器,無需關係處理的單個物件,還是組合的物件容器。

將」客戶**與複雜的物件容器結構「解耦。

可以更容易地往組合物件中加入新的構件。

樹枝和樹葉數量可以根據需求隨意搭配,但是樹枝可以有分支,樹葉不能再有分支,所以這裡有兩種實現方式:透明方式和安全方式

透明組合模式:在component中宣告所有來管理子物件的方法,其中包括add,remove等。這樣實現component介面的所有子類都具備了add和remove方法。這樣做的好處是葉節點和枝節點對於外界沒有區別,它們具備完全一致的介面。

缺點:客戶端對葉節點和枝節點是一致的,但葉節點並不具備add和remove的功能,因而對它們的實現是沒有意義的

/// 乙個抽象構件,宣告乙個介面用於訪問和管理component的子部件

public abstract class component

/// 增加乙個節點

public abstract void add(component component);

/// 移除乙個節點

public abstract void remove(component component);

/// 顯示層級結構

public abstract void display(int level);

} /// 葉子節點

public class leaf : component

/// 由於葉子節點沒有子節點,所以add和remove方法對它來說沒有意義,但它繼承自component,這樣做可以消除葉節點和枝節點物件在抽象層次的區別,它們具備完全一致的介面。

public override void add(component component)

/// 實現它沒有意義,只是提供了乙個一致的呼叫介面

public override void remove(component component)

public override void display(int level)

}/// 定義有枝節點的行為,用來儲存部件,實現在component介面中對子部件有關的操作

public class composite : component

/// 乙個子物件集合,用來儲存其下屬的枝節點和葉節點

private listchildren = new list();

/// 增加子節點

public override void add(component component)

/// 移除子節點

public override void remove(component component)

public override void display(int level)

}} /// 呼叫

static void main(string args)

安全組合模式:在component中不去宣告add和remove方法,那麼子類的leaf就不需要實現它,而是在composit宣告所有用來管理子類物件的方法。

缺點:葉節點無需在實現add與remove這樣的方法,但是對於客戶端來說,必須對葉節點和枝節點進行判定,為客戶端的使用帶來不便。

public abstract class component

/// 顯示層級結構

public abstract void display(int level);

} /// 葉子節點

public class leaf : component

public override void display(int level)

} /// 定義有枝節點的行為,用來儲存部件,實現在component介面中對子部件有關的操作

public class composite : component

/// 乙個子物件集合,用來儲存其下屬的枝節點和葉節點

private listchildren = new list();

/// 增加子節點

public void add(component component)

/// 移除子節點

public void remove(component component)

public override void display(int level)

}} static void main(string args)

常用軟體設計模式(三)工廠方法模式

工廠方法模式 定義乙個用於建立物件的介面,讓其子類決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。優點 1 乙個呼叫者想建立乙個物件,只要知道其名稱就可以了 2 擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以 3 遮蔽產品的具體實現,克服了簡單工廠所違背的開閉原則的缺點,...

設計模式8 組合模式

組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...

《設計模式12 組合模式

組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...