装饰器模式Decorator(c++)
?
?
相应的代码:
#include <iostream>#include <vector>#include <string>using namespace std;// base classclass Beverage{public:virtual string getDescription() = 0;virtual float cost() = 0;};// base class of condiment, also a base decorator classclass CondimentDecorator : public Beverage{protected:Beverage *m_coffee;};// coffee DarkRoastclass DarkRoast: public Beverage{public:string getDescription() {return "Darkroast";}float cost() {return 5.0;}};// coffee Espressoclass Espresso: public Beverage{public:string getDescription() {return "Espresso";}float cost() {return 6.5;}};// condiment milkclass Milk: public CondimentDecorator{public:Milk() {}Milk(Beverage *coffee) {m_coffee = coffee;}string getDescription() {return m_coffee->getDescription() + ", Milk";}float cost() {return m_coffee->cost() + 1.0;}};// condiment mochaclass Mocha: public CondimentDecorator{public:Mocha() {}Mocha(Beverage *coffee) {m_coffee = coffee;}string getDescription() {return m_coffee->getDescription() + ", Mocha";}float cost() {return m_coffee->cost() + 0.5;}};int main(){Beverage *coffee = new Espresso;coffee = new Milk(coffee);coffee = new Mocha(coffee);cout<<coffee->getDescription()<<" $"<<coffee->cost();getchar();return 0;}
?
打印出:
?
Esprosso, Milk, Mocha &8
?