類似選單,裡面不僅選單項,還要包含子選單。需要實現這種多級選單 。
組合模式(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控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...
設計模式之組合模式
組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...