📄 decorator.cpp
字号:
#include <iostream>
#include <string>
using namespace std;
class Beverage
{
public:
Beverage()
:description("Unknown Beverage")
{
}
virtual string GetDescription()
{
return description;
}
virtual double Cost() = 0;
protected:
string description;
};
class CondimentDecorator : public Beverage
{
public:
virtual string GetDescription() = 0;
};
class Espresso : public Beverage
{
public:
Espresso()
//:description("Espresso")
{
description = "Espresso";
}
double Cost()
{
return 1.99;
}
};
class HouseBlend : public Beverage
{
public:
HouseBlend()
{
description = "House Blend Coffee";
}
double Cost()
{
return .89;
}
};
class Mocha : public CondimentDecorator
{
public:
Mocha(Beverage* b)
{
beverage = b;
}
string GetDescription()
{
return beverage->GetDescription() + ", Mocha";
}
double Cost()
{
return .20 + beverage->Cost();
}
private:
Beverage *beverage;
};
class Whip : public CondimentDecorator
{
public:
Whip(Beverage* b)
{
beverage = b;
}
string GetDescription()
{
return beverage->GetDescription() + ", Whip";
}
double Cost()
{
return .20 + beverage->Cost();
}
private:
Beverage *beverage;
};
class Soy: public CondimentDecorator
{
public:
Soy(Beverage* b)
{
beverage = b;
}
string GetDescription()
{
return beverage->GetDescription() + ", Soy";
}
double Cost()
{
return .20 + beverage->Cost();
}
private:
Beverage *beverage;
};
int main()
{
Beverage *beverage = new Espresso;
cout << beverage->GetDescription() << " $" << beverage->Cost() << endl;
int i = sizeof HouseBlend;
int k = sizeof Mocha;
Beverage *beverage2 = new HouseBlend;
beverage2 = new Mocha(beverage2);
beverage2 = new Soy(beverage2);
beverage2 = new Whip(beverage2);
cout << beverage2->GetDescription() << " $" << beverage2->Cost() << endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -