分公司 一部門 組合模式

2022-09-15 21:00:18 字數 3615 閱讀 4185

19.1 分公司不就是一部門嗎?

整體與部分可以被一致對待,

19.2 組合模式

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

namespace

組合模式

}//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) //

葉節點的具體方法,}}

view code

19.3 透明方式與安全方式

透明模式,在component中宣告所有用來管理子類物件的方法,其中包括add和remove等,這樣實現component介面的所有子類都具備了add和remove,這樣做的好處就是葉節點和枝節點對於外界沒有區別,它們具備完全一致的行為介面,但問題也很明顯,因為leaf類本身不具備add和remove方法的功能,所以實現它是沒有意義的,

安全方式,樹枝類和樹葉類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不便,

19.4 何時使用組合模式

當需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,同一的使用組合結構中的所有物件時,就應該考慮用組合模式了,

19.5 公司管理系統

namespace

組合模式

}//公司類,抽象或介面,

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);}}

}

view code

19.6 組合模式的好處

組合模式這樣就定義了包含人力資源部和財務部這些基本物件和分公司,辦事處等組合物件的類層次結構,基本物件可以被組合成更複雜的物件,而這個組合物件又可以被組合,這樣的不斷遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了,

使用者是不用關心到底是處理乙個葉節點還是處理乙個組合元件,也就用不著為定義組合而寫一些選擇判斷語句了,

簡單的說,就是組合模式讓客戶可以一致的使用組合結構和單個物件,

分公司 一部門 組合模式

組合模式 composite pattern 又叫部分 總體模式,將物件組合成樹形結構以表示 部分 總體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。組合模式使我們樹型結構的問題中。模糊了簡單元素和複雜元素的概念。客戶程式能夠像處理簡單元素一樣來處理複雜元素,從而使得客戶程式...

大話設計模式十九 組合模式(分公司 一部門)

組合模式使使用者對單個物件和組合物件的使用具有一致性。應用場景 需求中體香部分和整體層次的結構或希望使用者忽略組合物件與單個物件的不同,可以統一地使用組合結構中的所有物件。優點 基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,可以不斷地遞迴下去。抽象公司類 public abstr...

大話設計模式十九 組合模式(分公司 一部門)

組合模式使使用者對單個物件和組合物件的使用具有一致性。應用場景 需求中體香部分和整體層次的結構或希望使用者忽略組合物件與單個物件的不同,可以統一地使用組合結構中的所有物件。優點 基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,可以不斷地遞迴下去。抽象公司類 public abstr...