《Head First设计模式》之装饰者模式实例代码C++实现
2012-10-15 23:02
826 查看
书中实例用java编写,由于本人不能熟练使用java,所以用c++实现以达到练习效果,代码如下:
输出结果如下:
#include <iostream> using namespace std; #include <string> class Beverage { public: Beverage(string desc = "") : description(desc) { } virtual string getDescription() const { return description; } virtual double cost() = 0; private: string description; }; class Condiment : public Beverage { public: string getDescription() const { return ""; } }; class Espresso : public Beverage { public: Espresso() { this->description = "Espresso"; } string getDescription() const { return "Espress"; } double cost() { return 1.99; } private: string description; }; class HouseBlend : public Beverage { public: HouseBlend() { this->description = "House Blend"; } string getDescription() const { return "House Blend"; } double cost() { return 0.89; } private: string description; }; class DarkRoast : public Beverage { public: DarkRoast() { this->description = "Dark Roast"; } string getDescription() const { return "Dark Roast"; } double cost() { return 0.59; } private: string description; }; class Decat : public Beverage { public: Decat() { this->description = "Decat"; } string getDescription() const { return "Decat"; } double cost() { return 0.69; } private: string description; }; class Mocha : public Condiment { public: Mocha(Beverage* b) : beverage(b) { } string getDescription() const { return beverage->getDescription() + ",Mocha"; } double cost() { return 0.2 + beverage->cost(); } private: Beverage* beverage; }; class Soy : public Condiment { public: Soy(Beverage* b) : beverage(b) { } string getDescription() const { return beverage->getDescription() + ",Soy"; } double cost() { return 0.3 + beverage->cost(); } private: Beverage *beverage; }; int main() { Beverage *b1 = new DarkRoast(); b1 = new Mocha(b1); b1 = new Mocha(b1); cout << "description: " << b1->getDescription() << endl;; cout << "cost: $" << b1->cost() << endl; cout << "-----------------------" << endl; Beverage *b2 = new HouseBlend(); b2 = new Soy(b2); b2 = new Mocha(b2); cout << "description: " << b2->getDescription() << endl;; cout << "cost: $" << b2->cost() << endl; }
输出结果如下:
相关文章推荐
- 《Head First设计模式》之装饰者模式实例代码C++实现
- 简单了解设计模式中的装饰者模式及C++版代码实现
- 装饰者模式及C++代码实现
- 装饰者模式C++实现——参考《Head First设计模式》
- C语言模式实现C++继承和多态的实例代码
- 大话设计模式--装饰者模式 Decorator -- C++实现实例
- Head First设计模式C++实现--第三章:装饰者(Decorator)模式
- 大话设计模式--装饰者模式 Decorator -- C++实现实例
- 外观模式c++代码实现
- 矩阵相乘strassen-c++代码实现及运行实例结果
- 模板模式c++代码实现
- 复数四则运算-c++代码实现及运行实例结果
- strstr()函数c++代码实现实例及运行结果
- 雇佣问题随机排列数组(permuteBySorting)-c++代码实现及运行实例结果
- 命令模式的c++代码实现
- 球与箱子-c++代码实现及运行实例结果
- 组合模式及C++代码实现
- 在线雇佣问题(onlineMaximumHireAssistant)-c++代码实现及运行实例结果
- 生日悖论扩展引申1-c++代码实现及运行实例结果
- 生日悖论扩展引申2-c++代码实现及运行实例结果