組合模式(composite):將物件組合成樹形結構以表示「部分——整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
透明方式:也就是說在component中宣告所有用來管理子物件的方法,其中包括add、remove等。這樣實現component介面的所有子類都具備了add和remove。這樣做的好處就是葉節點和枝節點對於外界沒有區別,它們具備完全一致的介面。但是問題也很明顯,因為leaf類本身不具備add()、remove()方法的功能,所以實現它是沒有意義的。
安全方式:也就是在component介面中不去宣告add和remove方法,那麼子類的leaf也就不需要去實現它,而是在composite宣告所有用來管理子類物件的方法,不過由於不夠透明,所以樹葉和樹枝類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不便。
using system;
using system.collections.generic;
/***組合模式(composite):將物件組合成樹形結構以表示「部分——整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
透明方式:也就是說在component中宣告所有用來管理子物件的方法,其中包括add、remove等。這樣實現component介面的所有子類都具備了add和remove。這樣做的好處就是葉節點和枝節點對於外界沒有區別,它們具備完全一致的介面。但是問題也很明顯,因為leaf類本身不具備add()、remove()方法的功能,所以實現它是沒有意義的。
安全方式:也就是在component介面中不去宣告add和remove方法,那麼子類的leaf也就不需要去實現它,而是在composite宣告所有用來管理子類物件的方法,不過由於不夠透明,所以樹葉和樹枝類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不便。
*/namespace studesignmode.composite
public abscomponent(string name)
public
abstract
void add(abscomponent c);
public
abstract
void remove(abscomponent c);
public
abstract
void display(int depth);
}class leaf : abscomponent
public
override
void add(abscomponent c)
public
override
void remove(abscomponent c)
public
override
void display(int depth)
}class composite : abscomponent
public
override
void add(abscomponent c)
public
override
void remove(abscomponent c)
public
override
void display(int depth)
}class clienttest}}
#endregion
}
設計模式筆記 組合模式
也叫合成模式,將物件組合成屬性機構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。component 抽象構建角色 定義參加組個物件的共有方法和屬性,可以定義一些預設的行為或屬性 public abstract class componet composite 樹枝構...
設計模式學習筆記 組合模式
定義 將物件組合成樹形結構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。組合模式主要用來處理一些具有 容器特徵 的物件,即他們在充當物件的同時,又可以作為容器包含其他的多個物件。也就是說組合模式表達的是一種樹形的結構,將資料結構中的 樹 用物件導向的方式表現出來了,...
設計模式學習筆記 組合模式
聽名字就像是把什麼東西組合在一起的設計模式,所以 組合模式就是將兩個類中的一些共同的方法抽象在一起然而,很多時候,一些類中的方法很明顯會不一樣,這裡,感覺 headfirst 上那個例子就挺好的,然後我做了下修改。public inte ce menuitem首先去設計乙個選單選項,一些和選單公有的...