設計模式筆記(十四) 組合模式

2021-04-21 06:58:30 字數 1716 閱讀 4563

組合模式(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首先去設計乙個選單選項,一些和選單公有的...