(gof《設計模式》):將物件組合成樹形結構以表示「部分整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
① component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。
② leaf 在組合中表示葉子結點物件,葉子結點沒有子結點。
③ composite 定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等。
以下情況下適用composite模式:
1.你想表示物件的部分-整體層次結構
2.你希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。
我們每天在公司上班,我們的公司其實就是乙個樹型結構的,最上邊是總公司,總公司下面還有很多子公司, 而每個子公司有很很多部門。這樣整個大公司就是一顆大樹,每個子公司同時也是一顆小叔
首先是公司的抽象介面
// 公司抽象類
class
company virtual ~company( ) virtual
void
add(company *pcompany)
// 增加子公司
virtual
void
show
(int depth)
= 0; // 顯示部門
protected : std::string m_name; // 顯示公司名字};
其次是公司的實現
// 公司類
class
concretecompany :
public company virtual ~concretecompany( ); // 虛析構函式
void
add(company *company)
// 新增子公司
void
show
(int depth)
// 顯示公司部門
std::cout
m_companylist.begin( ); it != this->m_companylist.end( ); ++it) }protected : std::list
m_companylist; // 下屬公司列表};
接著是財務部門的實現
// 財務部門
class
finacedepartment :
public company virtual ~finacedepartment( ) void
show
(int depth)
// 顯示公司部門
std::cout
// 人力部門
class
hrdepartment :
public company virtual ~hrdepartment( ); // 虛析構函式
void
show
(int depth)
// 顯示公司部門
std::cout
int
main
()
組合模式解耦了客戶程式與複雜元素內部結構,從而使客戶程式可以像處理簡單元素一樣來處理複雜元素。
如果你想要建立層次結構,並可以在其中以相同的方式對待所有元素,那麼組合模式就是最理想的選擇。本章使用了乙個檔案系統的例子來舉例說明了組合模式的用途。在這個例子中,檔案和目錄都執行相同的介面,這是組合模式的關鍵。通過執行相同的介面,你就可以用相同的方式對待檔案和目錄,從而實現將檔案或者目錄儲存為目錄的子級元素。
(gof《設計模式》):將物件組合成樹形結構以表示「部分整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。
① component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。
② leaf 在組合中表示葉子結點物件,葉子結點沒有子結點。
③ composite 定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等。
以下情況下適用composite模式:
1.你想表示物件的部分-整體層次結構
2.你希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。
我們每天在公司上班,我們的公司其實就是乙個樹型結構的,最上邊是總公司,總公司下面還有很多子公司, 而每個子公司有很很多部門。這樣整個大公司就是一顆大樹,每個子公司同時也是一顆小叔
首先是公司的抽象介面
// 公司抽象類
class
company virtual ~company( ) virtual
void
add(company *pcompany)
// 增加子公司
virtual
void
show
(int depth)
= 0; // 顯示部門
protected : std::string m_name; // 顯示公司名字};
其次是公司的實現
// 公司類
class
concretecompany :
public company virtual ~concretecompany( ); // 虛析構函式
void
add(company *company)
// 新增子公司
void
show
(int depth)
// 顯示公司部門
std::cout
m_companylist.begin( ); it != this->m_companylist.end( ); ++it) }protected : std::list
m_companylist; // 下屬公司列表};
接著是財務部門的實現
// 財務部門
class
finacedepartment :
public company virtual ~finacedepartment( ) void
show
(int depth)
// 顯示公司部門
std::cout
// 人力部門
class
hrdepartment :
public company virtual ~hrdepartment( ); // 虛析構函式
void
show
(int depth)
// 顯示公司部門
std::cout
int
main
()
組合模式解耦了客戶程式與複雜元素內部結構,從而使客戶程式可以像處理簡單元素一樣來處理複雜元素。
如果你想要建立層次結構,並可以在其中以相同的方式對待所有元素,那麼組合模式就是最理想的選擇。本章使用了乙個檔案系統的例子來舉例說明了組合模式的用途。在這個例子中,檔案和目錄都執行相同的介面,這是組合模式的關鍵。通過執行相同的介面,你就可以用相同的方式對待檔案和目錄,從而實現將檔案或者目錄儲存為目錄的子級元素。
設計模式11 組合模式
組合模式有時又叫部分 整體模式在處理類似樹形結構的問題時比較方便 分支類public class treenode public string getname public void setname string name public treenode getparent public void ...
設計模式11 組合模式
還是餐廳,多個餐廳合併,每個餐廳的選單實現方式不一樣,有的為arraylist有的為array.參見 10迭代器模式 增加餐後甜點子選單,需要改子選單和原選單列表中的選單項同級.原選單列表中都為menuitem,而現在還要增加子選單.要求如下 外鏈轉存失敗 img altdnffq 15661405...
C 設計模式(八)組合模式
在軟體開發過程中,我們經常會遇到處理簡單物件和復合物件的情況,例如對作業系統中目錄的處理就是這樣的乙個例子,因為目錄可以包括單獨的檔案,也可以包括資料夾,資料夾又是由檔案組成的,由於簡單物件和復合物件在功能上區別,導致在操作過程中必須區分簡單物件和復合物件,這樣就會導致客戶呼叫帶來不必要的麻煩,然而...