深入浅出设计模式笔记 -----Decorator
2007-10-12 22:50
417 查看
读了深入浅出设计模式Decorator篇,对于Decorator有了新的了解与认识,决定将Decorator模式实现一遍,下面用C++语言将咖啡馆的例子重现。
UML图:
最后运行结果:
可以看到DarkHost咖啡的价格是5元
加入调料糖后的价格变成5+0.5
UML图:
/******************************************************************** created: 2007/10/12 filename: AbstractCofee.h author: 凌剑 http://blog.csdn.net/missvip purpose: Decorator抽象的咖啡类与抽象的修饰类 *********************************************************************/ #ifndef ABSTRACTCOFEE_H #define ABSTRACTCOFEE_H #include <string> using namespace std; class BeverageCofee { public: virtual double getCost() =0; virtual string getDescription () =0; }; class DecoratorCofee : public BeverageCofee { protected: DecoratorCofee(BeverageCofee *pBever); BeverageCofee *pBeverage; }; #endif |
/******************************************************************** created: 2007/10/12 filename: ConcreteCofee.h author: 凌剑 http://blog.csdn.net/missvip purpose: Decorator具体的咖啡类与具体的修饰类 *********************************************************************/ #ifndef CONCRETECOFEE_H_H #define CONCRETECOFEE_H_H #include "AbstractCofee.h" class HostBlendCofee : public BeverageCofee { public: double getCost(); string getDescription(); }; class DarkHostCofee : public BeverageCofee { public: double getCost(); string getDescription(); }; class Milk : public DecoratorCofee { public: Milk(BeverageCofee *pBever); double getCost(); string getDescription (); }; class Suger : public DecoratorCofee { public: Suger(BeverageCofee *pBever); double getCost(); string getDescription (); }; #endif |
/******************************************************************** created: 2007/10/12 filename: AbstractCofee.cpp author: 凌剑 http://blog.csdn.net/missvip purpose: Decorator抽象的咖啡类与抽象的修饰类 *********************************************************************/ #include "AbstractCofee.h" DecoratorCofee::DecoratorCofee(BeverageCofee *pBever):pBeverage(pBever) { } |
/******************************************************************** created: 2007/10/12 filename: ConcreteCofee.cpp author: 凌剑 http://blog.csdn.net/missvip purpose: Decorator具体的咖啡类与具体的修饰类 *********************************************************************/ #include "ConcreteCofee.h" double HostBlendCofee::getCost() { return 4.0; } string HostBlendCofee::getDescription() { return "HostBlend咖啡"; } double DarkHostCofee::getCost() { return 5.0; } string DarkHostCofee::getDescription() { return "DarkHost咖啡"; } Milk::Milk(BeverageCofee *pBever):DecoratorCofee(pBever) { } double Milk::getCost() { return pBeverage->getCost()+1.5; } string Milk::getDescription() { return pBeverage->getDescription()+"+牛奶"; } Suger::Suger(BeverageCofee *pBever):DecoratorCofee(pBever) { } double Suger::getCost() { return pBeverage->getCost()+0.5; } string Suger::getDescription() { return pBeverage->getDescription()+"+糖"; } |
/******************************************************************** created: 2007/10/12 filename: Main.cpp author: 凌剑 http://blog.csdn.net/missvip purpose: 客户程序测试Decorator *********************************************************************/ #include <iostream> #include "ConcreteCofee.h" using namespace std; int main() { BeverageCofee *OrderDarkHostCofee =new DarkHostCofee(); cout<<OrderDarkHostCofee->getDescription()<<"价格是:"<<OrderDarkHostCofee->getCost()<<endl; //加糖后的价格 OrderDarkHostCofee =new Suger(OrderDarkHostCofee); cout<<OrderDarkHostCofee->getDescription()<<"价格是:"<<OrderDarkHostCofee->getCost()<<endl; //加牛奶后的价格 OrderDarkHostCofee =new Milk(OrderDarkHostCofee); cout<<OrderDarkHostCofee->getDescription()<<"价格是:"<<OrderDarkHostCofee->getCost()<<endl; return 0; } |
可以看到DarkHost咖啡的价格是5元
加入调料糖后的价格变成5+0.5
相关文章推荐
- 设计模式笔记-结构型模式之四--Decorator
- 设计模式学习笔记(2)——装饰模式(Decorator Pattern)
- 深入浅出设计模式笔记之一:工厂模式
- 深入浅出设计模式笔记之八:装饰模式
- 深入浅出设计模式笔记之十六:观察者模式
- HeadFirst 设计模式笔记(三)—— decorator
- 设计模式笔记(5 COMPOSITE & DECORATOR)
- 步步为营 .NET 设计模式学习笔记 十四、Decorator(装饰模式)
- 设计模式笔记之Decorator Pattern
- 设计模式笔记(5 COMPOSITE & DECORATOR)
- 设计模式学习笔记---装饰模式decorator(Java版)
- 设计模式学习笔记——修饰模式(Decorator Pattern)
- Decorator模式——设计模式学习笔记
- 深入浅出设计模式笔记之十七:策略模式
- 设计模式学习笔记九——Decorator模式
- 深入浅出设计模式——装饰模式(Decorator Pattern)
- 深入浅出设计模式笔记之十:代理模式
- 深入浅出设计模式笔记之十八:状态模式
- 设计模式 学习笔记 之 装饰模式 Decorator(6)
- 设计模式笔记 9.Decorator 装饰模式(结构型模式)