設計模式 組合模式

2022-02-02 19:18:35 字數 2705 閱讀 3481

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

//component為組合中的物件宣告介面,在適當情況下,實現所有類共有介面的預設行為。

//宣告乙個介面用於訪問和管理component的子部件

class

component

virtual

void add(component *c){}

virtual

void remove(component *c){}

virtual

void display(int

depth){}

};//

leaf在組合中表示葉結點物件,葉結點沒有子結點。

class leaf:public

component

void add(component *c)

void remove(component *c)

void display(int

depth)

};//

composite定義有枝結點行為,用來儲存子部件,在component介面中實現與子部件有關的操作,比如增加和刪除

class composite:public

component

void add(component *c)

void remove(component *c)

void display(int

depth)

};int

main()

樹可能有無數的分枝,但只需要反覆用composte就可以實現樹狀結構了,但是為什麼leaf類當中也有add和remove,樹葉不是不可以在長分枝,這種方式叫做透明方式,也就是說在component中宣告所有用來管理子物件的方法,其中包括add、remove等。這樣實現component介面的所有子類都具備了add和remove。這樣做的好處就是葉結點和枝結點對於外界沒有區別,他們具備完全一致的行為介面。但問題也很明顯,因為leaf類本身不具備add()、remove()方法的功能,所以實現它是沒有意義的。所以我們又有另一種方式——安全方式,也就是說在component介面中不去宣告add和remove方法,那麼子類的leaf也就不需要去實現它,而是在composite宣告所有用來管理子類物件的方法,這樣做就不會出現剛才提到的問題,不過由於不夠透明,所以樹葉和樹枝類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不方便。

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

example:

公司管理系統

具體公司類 實現介面 樹枝結點

class concretecompany:public

company

void add(company *c)

void remove(company *c)

void display(int

depth)

void

lineofduty()

};class hrdepartment:public

company

void add(company *c){}

void remove(company *c){}

void display(int

depth)

void

lineofduty()

};class financedepartment:public

company

void add(company *c){}

void remove(company *c){}

void display(int

depth)

void

lineofduty()

};int

main()

組合模式定義了包含基本物件和組合物件的類層次結構。基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,這樣不斷的遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了。使用者是不關心到底是處理乙個葉結點還是乙個組合元件,也就用不著為定義組合而寫一些選擇判斷語句了。簡單說,就是組合模式讓客戶可以一致地使用組合結構和單個物件。

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

設計模式 組合模式 組合模式使用

目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...

設計模式 組合設計模式

組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...