將物件組合成樹形結構以表示「部分-整體」的層次結構。組合使得使用者對單個物件和組合物件的使用具有一致性。注意兩個字「樹形」。這種樹形結構在現實生活中隨處可見,比如乙個集團公司,它有乙個母公司,下設很多家子公司。不管是母公司還是子公司,都有各自直屬的財務部、人力資源部、銷售部等。對於母公司來說,不論是子公司,還是直屬的財務部、人力資源部,都是它的部門。整個公司的部門拓撲圖就是乙個樹形結構。
優點
將物件組合成樹形結構以表示「部分-整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
使用場景
你想表示物件的部分-整體層次結構;
希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。
引用大話設計模式的片段:「當發現需求中是體現部分與整體層次結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮組合模式了。」
#include
#include
#include
using
namespace std;
class
company
virtual
void
show
(int depth)
protected
: string m_name;};
//具體公司
class
concretecompany
:public company
void
add(company * company)
void
show
(int depth)
private
: list> m_listcompany;};
//具體的部門,財務部
class
financedepartment
:public company
void
show
(int depth)
cout << m_name << endl;}}
;//具體的部門,人力資源部
class
hrdepartment
:public company
void
show
(int depth)
cout << m_name << endl;}}
;int
main()
C 設計模式 組合模式
一.概述 組合模式,將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。結構 1.component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。2.leaf 在組合...
C 設計模式 組合模式
一 組合模式的定義 組合多個物件形成樹形結構以表示具有部分 整體關係的層次結構。二 說明 組合模式關注那些包含葉子構件和容器構件的結構以及它們的組織形式,在葉子結構中不包含成員物件,而容器構件中包含成員物件,這些物件通過遞迴組合可構成乙個樹形結構。由於容器物件和葉子物件在功能上存在區別,因此在使用這...
C 設計模式 組合模式
ifndef composite h define composite h include include include 說明 組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。同...