⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decorator.cpp

📁 深入浅出设计模式部分C++源码。用.net2003调试通过。
💻 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 + -