19.1 分公司不就是一部門嗎?
整體與部分可以被一致對待,
19.2 組合模式
將物件組合成樹形結構以表示「部分-整體」的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性,
namespaceview code組合模式
}//component為組合中的物件介面宣告,
//適當情況下,實現所有類共有介面的預設行為,
//宣告乙個介面用於訪問和管理component的子部件,
abstract
class
component
public
abstract
void add(component c); //
通常用add和remove方法來提供增加和移除樹枝或樹葉的過程,
public
abstract
void
remove(component c);
public
abstract
void display(int
depth);
}//composite定義有枝節點行為,用來儲存子部件,
//在component介面中實現與子部件有關的操作,如add與remove,
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) //
由於葉子沒有在再增加分枝和樹葉,所以add和remove方法實現它沒有意義,
public
override
void
remove(component c)
public
override
void display(int depth) //
葉節點的具體方法,}}
19.3 透明方式與安全方式
透明模式,在component中宣告所有用來管理子類物件的方法,其中包括add和remove等,這樣實現component介面的所有子類都具備了add和remove,這樣做的好處就是葉節點和枝節點對於外界沒有區別,它們具備完全一致的行為介面,但問題也很明顯,因為leaf類本身不具備add和remove方法的功能,所以實現它是沒有意義的,
安全方式,樹枝類和樹葉類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不便,
19.4 何時使用組合模式
當需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,同一的使用組合結構中的所有物件時,就應該考慮用組合模式了,
19.5 公司管理系統
namespaceview code組合模式
}//公司類,抽象或介面,
abstract
class
company
public
abstract
void add(company c); //
增加,public
abstract
void remove(company c); //
移除,public
abstract
void display(int depth); //
顯示,public
abstract
void lineofduty(); //
履行職責,
}
//具體公司類,實現介面,樹枝節點,
class
concretecompany : company
public
override
void
add(company c)
public
override
void
remove(company c)
public
override
void display(int
depth)
}//履行職責,
public
override
void
lineofduty()}}
//人力資源部,
class
hrdepartment : company
public
override
void
add(company c)
public
override
void
remove(company c)
public
override
void display(int
depth)
public
override
void
lineofduty()
員工招聘培訓管理
", name);}}
//財務部,
class
financedepartment : company
public
override
void
add(company c)
public
override
void
remove(company c)
public
override
void display(int
depth)
public
override
void
lineofduty()
公司財務收支管理
", name);}}
}
19.6 組合模式的好處
組合模式這樣就定義了包含人力資源部和財務部這些基本物件和分公司,辦事處等組合物件的類層次結構,基本物件可以被組合成更複雜的物件,而這個組合物件又可以被組合,這樣的不斷遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了,
使用者是不用關心到底是處理乙個葉節點還是處理乙個組合元件,也就用不著為定義組合而寫一些選擇判斷語句了,
簡單的說,就是組合模式讓客戶可以一致的使用組合結構和單個物件,
分公司 一部門 組合模式
組合模式 composite pattern 又叫部分 總體模式,將物件組合成樹形結構以表示 部分 總體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。組合模式使我們樹型結構的問題中。模糊了簡單元素和複雜元素的概念。客戶程式能夠像處理簡單元素一樣來處理複雜元素,從而使得客戶程式...
大話設計模式十九 組合模式(分公司 一部門)
組合模式使使用者對單個物件和組合物件的使用具有一致性。應用場景 需求中體香部分和整體層次的結構或希望使用者忽略組合物件與單個物件的不同,可以統一地使用組合結構中的所有物件。優點 基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,可以不斷地遞迴下去。抽象公司類 public abstr...
大話設計模式十九 組合模式(分公司 一部門)
組合模式使使用者對單個物件和組合物件的使用具有一致性。應用場景 需求中體香部分和整體層次的結構或希望使用者忽略組合物件與單個物件的不同,可以統一地使用組合結構中的所有物件。優點 基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,可以不斷地遞迴下去。抽象公司類 public abstr...