1.說明
請參見本文第一章
2.組合模式說明
組合模式:將物件組合成樹形介面以表示『部分-整體』的層次結構。組合模式使得使用者對單個物件和組合物件具有一致性。
為了保持整體和區域性的一致性,整體和區域性具有相同的介面,從而避免判斷該節點是整體還是區域性。介面可以實現為空。
使用範圍:在需求中體現部分與整體的層次的介面時,以及你希望使用者忽略組合物件與單個物件的不同,同一地使用組合介面中的所有物件時,可以考慮使用組合模式
注意:為了表示在樹形中的深度時,會在呼叫中加入步進,以表示在巢狀的處理過程中的節點深度
//公司基類
#ifndef __company_h
#define __company_h
#include
#include
class ccompany
std::string getname()
virtual
void add(ccompany* com)
virtual
void remove(ccompany* com)
virtual
void display(int step) = 0;
virtual
void responsibility(int step) = 0;
private:
std::string m_name;
};#endif
//財政
#ifndef __finacial_h
#define __finacial_h
#include "company.h"
class cfinacia:public ccompany
~cfinacia(){}
virtual
void display(int step)
virtual
void responsibility(int step)
private:
std::string m_responsibility;
};#endif
//人事
#ifndef __manpower_h
#define __manpower_h
#include "company.h"
class cmanpower:public ccompany
~cmanpower(){}
virtual
void display(int step)
virtual
void responsibility(int step)
void set_responsibility(std::string bility)
private:
std::string m_responsibility;
};#endif
//具體公司
#ifndef __realcompany_h
#define __realcompany_h
#include
#include "company.h"
typedef
std::list
companlylist;
class crealcompany:public ccompany
virtual
void add(ccompany* com)
virtual
void remove(ccompany* com)
else
it++;}}
void display(int step)
}void responsibility(int step)
}void set_responsibility(std::string bility)
private:
std::string m_responsibility;
companlylist m_conlist;
};#endif
//client呼叫
#include
#include "company.h"
#include "realcompany.h"
#include "manpower.h"
#include "finacia.h"
int main(void)
《設計模式12 組合模式
組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...
12 組合總和II
題目描述 給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candida...
15 組合模式
定義 將物件組合成樹形結構以表示 部門 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。適用 當發現需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,同意地適用組合結構中的所有物件時,就應該考慮用組合模式了。asp.net的treevie...