組合模式:將物件組合成樹形結構以表示「部分 -整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
優點:
組合模式使得客戶端**可以一致地處理物件和物件容器,無需關係處理的單個物件,還是組合的物件容器。
將」客戶**與複雜的物件容器結構「解耦。
可以更容易地往組合物件中加入新的構件。
樹枝和樹葉數量可以根據需求隨意搭配,但是樹枝可以有分支,樹葉不能再有分支,所以這裡有兩種實現方式:透明方式和安全方式
透明組合模式:在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 而枝幹是可以繼續向下延伸的...