設計模式之組合模式

2021-08-07 08:08:57 字數 3285 閱讀 4009

類似選單,裡面不僅選單項,還要包含子選單。需要實現這種多級選單 。

組合模式(composite pattern)允許你將物件組合成樹形結構來表現「整體/部分」層次結構。組合能 讓客戶以一致的方式處理個別物件以及物件組合。uml圖如下:

現在物件村餐廳想在選單裡,餐廳選單裡新增甜點選單。也就是不僅僅要支援多個選單,甚至還要支援選單裡的選單。

#include 

#include

#include

using

namespace

std;

//父類元件

class menucomponent

virtual

string getdescription()

virtual

double getprice()

virtual

bool isvegetarian()

virtual

void print()

virtual

void add(menucomponent* component)

virtual

void remove(menucomponent* component)

virtual menucomponent* getchild(int index)

private:

};menucomponent::menucomponent()

menucomponent::~menucomponent()

//迭代器基類

class iterator

;class nulliterator :public iterator

bool hasnext()

};nulliterator::nulliterator()

nulliterator::~nulliterator()

//煎餅屋餐單迭代器

class compositeiterator : public iterator

menucomponent* next()

bool hasnext()

else

}private:

vector

items;

vector

::const_iterator iter;

};//選單項

class menuitem : public menucomponent

menuitem(string name, string description, bool vegetarian, double price)

~menuitem()

string getname()

string getdescription()

bool isvegetarian()

double getprice()

void print()

void add(menucomponent* component)

void remove(menucomponent* component)

menucomponent* getchild(int index)

iterator* createiterator()

private:

string name_;

string description_;

bool vegetarian_;

double price_;

};//餐單基類

class menu : public menucomponent

string getdescription()

menucomponent* getchild(int index)

void print()

}vector

getmenuitems()

iterator* createiterator()

void add(menucomponent* component)

protected:

vector

menu_compents_;

private:

string name_;

string description_;

};menu::menu(string name, string description)

:name_(name),

description_(description)

//煎餅屋選單

組合模式提供乙個結構,可同時包容個別物件和組合物件。組合模式允許客戶對個別物件和組合物件一視同仁。組合結構內的任意物件稱為元件,元件可以是組合,也可以是葉節點。

設計模式之組合模式

組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...

設計模式之 組合模式

有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...

設計模式之組合模式

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...