#include<iostream>
using namespace std;
//抽象饮料类
class Beverage
{
public:
virtual int GetPrice() = 0;
};
//水果饮料类
class FruitBeverage :public Beverage
{
public:
int GetPrice() override
{
return 10;
}
};
//抽象的装饰器类
class Decorator :public Beverage
{
public:
Decorator(Beverage *pBeverage) :m_pBeverage(pBeverage)
{
}
int GetPrice() override
{
return m_pBeverage->GetPrice();
}
private:
Beverage *m_pBeverage;
};
//加糖
class Decorator_Sugar :public Decorator
{
public:
Decorator_Sugar(Beverage *pBeverage) :Decorator(pBeverage)
{
}
int GetPrice() override
{
cout << "加糖\n";
return Decorator::GetPrice() + 1;
}
};
//加牛奶
class Decorator_Milk :public Decorator
{
public:
Decorator_Milk(Beverage *pBeverage) :Decorator(pBeverage)
{
}
int GetPrice() override
{
cout << "加牛奶\n";
return Decorator::GetPrice() + 1;
}
};
//加珍珠
class Decorator_Bubble :public Decorator
{
public:
Decorator_Bubble(Beverage *pBeverage) :Decorator(pBeverage)
{
}
int GetPrice() override
{
cout << "加珍珠\n";
return Decorator::GetPrice() + 2;
}
};
void main()
{
Beverage *p = new FruitBeverage;//普通的饮料
Decorator *d1 = new Decorator_Sugar(p);//加点糖
Decorator *d2 = new Decorator_Milk(d1);//加点牛奶
Decorator *d3 = new Decorator_Bubble(d2);//加珍珠
cout << d3->GetPrice() << endl;
delete p;
delete d1;
delete d2;
delete d3;
system("pause");
}
结果: