奶茶已經是現在年輕人必不可少的「養身」飲料,眾所周知奶茶只是基本產品,可以加入龜苓膏、珍珠、檸檬片、果凍、養樂多等等原材料來形成不同的產品。那麼對於乙個奶茶店來說,每做一杯產品的**該如何確定呢?這肯定是取決於使用材料的不同。
例如一杯純奶茶,成本就是最少的,但是要是一杯燒仙草那麼成本就相對更高。
對於奶茶店來說如果想使用乙個系統來獲取產品的**,那麼就適合使用裝飾者模式。
這裡的產品就是被裝飾者,而材料就是裝飾者。將不同的裝飾者裝飾到被裝飾者上便得到不同的產品。同時每乙個裝飾者也是乙個被裝飾者。
**如下:
#ifndef decoratorpattern_h
#define decoratorpattern_h
#include #include using namespace std;
//基礎抽象類
class product
~product(){}
virtual double cost() = 0;//**
};//純奶茶
class milkteam:public product
~milkteam(){}
double cost()
};//燒仙草
class shaoxiancao:public product
~shaoxiancao(){}
double cost()
};//檸檬養樂多
class ningmengyangleduo:public product
~ningmengyangleduo(){}
double cost()
};//裝飾者抽象類,也要繼承產品的基礎類
class materialdecorator:public product
~materialdecorator(){}
virtual void getname() = 0;
};//裝飾者1——龜苓膏
class guilinggao:public materialdecorator
~guilinggao(){}
void getname()
private:
product *product = nullptr;
};//裝飾者2——檸檬片
class ningmengpian:public materialdecorator
~ningmengpian(){}
void getname()
private:
product *product = nullptr;
};//裝飾者3——養樂多
class yangleduo:public materialdecorator
~yangleduo(){}
void getname()
private:
product *product = nullptr;
};#endif // decoratorpattern_h
main.cpp中呼叫:
product *pmilkteam = new milkteam;//顧客1 點了一杯純奶茶
cout <
product *pshaoxiancao = new shaoxiancao;//顧客2 點了一杯燒仙草
pshaoxiancao = new guilinggao(pshaoxiancao);//燒仙草需要加入龜苓膏
cout <
結果:
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...
設計模式 裝飾模式
剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...
設計模式 裝飾模式
複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...