設計模式C 實現 組合模式

2022-09-23 23:15:23 字數 1965 閱讀 4327

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

component:

為組合中的物件宣告介面;

在適當情況下實現所有類共有介面的預設行為;

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

在遞迴結構中定義乙個介面,用於訪問乙個父部件,並在合適的情況下實現它

leaf:

在組合中表示葉節點物件,葉節點沒有子節點,並定義其行為

composite:

定義有子部件的那些部件的行為

儲存子部件

實現與子部件有關的操作

client:

通過component介面操作組合件和個別物件。

在迭代器例子中,我們希望在午餐餐單中增加乙份跌點餐單,也就是說希望能讓甜點餐單變成午餐餐單的乙個元素。

我們可以用組合模式解決這個問題:一開始我們建立乙個元件介面作為餐單和選單項的共同介面,讓我們能夠用統一的做法來處理選單和選單項。換句話說,我們可以針對選單或選單項呼叫相同的方法。然後實現選單項和組合選單元件,以及他們各自的方法。

#include

#include

#include

#include

using namespace std;

//選單和選單項共同的元件

class menucomponent

virtual void remove(menucomponent* menucomponent)

virtual menucomponent* getchild(int i)

virtual string getname()

virtual string getdescription()

virtual double getprice()

virtual void print() };

//選單項類

class menuitem : public menucomponent

menuitem(string na, string descrip, double pric)

string getname()

string getdescription()

double getprice()

void print()

}} menucomponent* getchild(int i)

string getname()

string getdescription()

void print() }

private:

vector pmenucomponents;

string name;

string description;

};//服務生類

class waitress

void printmenu()

private:

menucomponent* allmenus;

};//客戶**

int main()

執行結果:

allmenus, all menus combined

--------------

pancakehouse menu, breakfast

--------------

dinermenu, lunch

--------------

pasta, 3.89 ---spaheti with sauce

dessertmenu, dessert of coure!

--------------

apple pie, 1.59 ---app pie with a cruse

請按任意鍵繼續. . .

設計模式C 實現 組合模式

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

設計模式 組合模式 C 實現

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

C 設計模式 組合模式

一.概述 組合模式,將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。結構 1.component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。2.leaf 在組合...