組合模式之C 實現

2021-06-22 20:22:24 字數 2533 閱讀 2216

組合模式(

composite

)也叫部分-整體模式,是一種非常實用的設計模式,當我們發現需求中系統體現的是整體與區域性的層次關係,並且使用者希望將組合物件單個物件一致性對待,這個時候「組合模式」的作用可以得到淋漓盡致地發揮了。

接觸過linux的人都知道linux的檔案系統採用的一種樹狀的層次結構,在linux系統中,目錄和普通檔案都被系統視為檔案,而目錄內又可以包含普通檔案,這樣linux的檔案系統就是以這種遞迴的方式定義。如果我們想描述這樣的資料結構,可以考慮採用組合模式。

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

從上面的定義我們可以得出組合模式的兩大特點:

1.從模式結構本身來看:模式本身體現的是一種整體與部分的層次結構關係;

2.從使用者的角度(客戶端)分析:整體(

分支結點)與部分(葉子結點)具有相同的介面,被形態上沒有差別。

組合模式的結構

本圖來自《大話設計模式》

舉例

下圖是一種組合模式的舉例:

c++實現**(針對以上面的舉例)

#include#include#includeusing namespace std;

class component//抽象類,使用者通過該介面來訪問其子部件

component(string str):name(str){};

virtual void add(component*)=0;//增加子部件

virtual void remove(component*)=0;//刪除子部件

virtual void display(int depth)=0;//遍歷結點,depth表示結點的深度

};class leaf:public component

//呼叫基類的建構函式初始化派生類的基類部分

void add(component* c)

//基類component呼叫其預設的建構函式

composite(string name):component(name){}

void add(component *c)

void remove(component *c)

void display(int depth) }

}; int main()

{ composite root("root");

/****新增root的孩子結點pa****/

leaf *pa=new leaf("leaf a");

root.add(pa);

/****新增root的孩子結點pb***/

leaf *pb=new leaf("leaf b");//新增root的孩子pb

root.add(pb);

/****新增root的分支結點comp***/

composite *comp1=new composite("composite x");

leaf *pxa=new leaf("leaf xa");

leaf *pxb=new leaf("leaf xb");

root.add(comp1);

/***新增comp1的分支結點comp2****/

composite *comp2=new composite("composite xy");

leaf *pxya=new leaf("leaf xya");

leaf *pxyb=new leaf("leaf xyb");

comp2->add(pxya);

comp2->add(pxyb);

comp1->add(comp2);

/***新增root的孩子結點pc和pd****/

leaf *pc=new leaf("leaf c");

leaf *pd=new leaf("leaf d");

root.add(pc);

root.add(pd);

cout<

測試結果

組合模式 C 實現

最近自學了設計模式,用c 自己實現的小例子,加深理解。組合模式 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。適用性 1 想要表示物件的部分 整體層次結構 2 希望使用者忽略組合物件與單個物件的不同,使用者將統一的使用組合結構中的所...

設計模式C 實現 組合模式

這個模式能夠建立乙個樹形結構,在同乙個結構中處理巢狀選單和選單項組。通過選單和項放在相同結構中,我們建立了乙個 整體 部分 層次結構,即由選單和選單項組成的物件樹。使用組合結構,我們能把相同的操作應用在組合和個別物件上。換句話說,在大多數情況下,我們可以忽略物件組合和個別物件之間的差別。為組合中的物...

設計模式 組合模式 C 實現

將物件組合成樹形結構以表示 部分 整體 的層次結構。composite模式使得使用者對單個物件和組合物件的使用具有一致性。1.模式定義 組合模式 composite pattern 將小物件組合成樹形結構,使使用者操作組合物件如同操作乙個單個物件。組合模式定義了 部分 整體 的層次結構,基本物件可以...