设计模式学习-Decorator装饰者模式

来源:互联网 发布:图片相似对比软件 编辑:程序博客网 时间:2024/06/15 09:27

装饰模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

Beverage 饮料

       Espresso      浓咖啡

CondimentDecorator       配料,继承于Beverage类

        Mocha            摩卡

        Whip               奶泡

代码:

#include<iostream>#include<string>#include<vector>using namespace std;//饮料class Beverage{public:Beverage(){}virtual string getdescription() = 0;virtual double cost() = 0;string name;};class Espresso : public Beverage{public:Espresso(){name = "Espresso";}double cost(){return 2.0;}string getdescription(){return name;}};//配料class CondimentDecorator : public Beverage{public:Beverage* beverage;};//摩卡class Mocha : public CondimentDecorator{public:Mocha(Beverage* _beverage){beverage = _beverage;name = "Mocha";}double cost(){return beverage->cost() + 1.5;}string getdescription(){return beverage->getdescription() + "," + name;}};//奶泡class Whip : public CondimentDecorator{public:Whip(Beverage* _beverage){beverage = _beverage;name = "Whip";}double cost(){return beverage->cost() + 0.9;}string getdescription(){return beverage->getdescription() + "," + name;}};int main(){cout << "原味咖啡" << endl;Beverage* p1 = new Espresso();cout << p1->getdescription() << endl;cout << "价格: " << p1->cost() <<endl;Beverage* p2 = new Mocha(p1);cout << p2->getdescription() << endl;cout << "价格: " << p2->cost() <<endl;Beverage* p3 = new Whip(p2);cout << p3->getdescription() << endl;cout << "价格: " << p3->cost() <<endl;delete p3;delete p2;delete p1;getchar();return 0;}
将调料作为装饰类,可根据需要对饮料添加相应的调料。

0 0
原创粉丝点击