设计模式学习---装饰者
来源:互联网 发布:mac 虚拟机 win10 4g 编辑:程序博客网 时间:2024/06/14 00:18
UML图
基类:CDrink
#pragma once#include <string>class CDrink{public:CDrink(void){};virtual void getDrinkName()=0;virtual double getDrinkPrice()=0;virtual ~CDrink(void){};};
Tea.h
#pragma once#include "drink.h"#include <string>#include <iostream>using namespace std;class CTea :public CDrink{public:void getDrinkName();double getDrinkPrice();CTea(void);~CTea(void);};Tea.cpp
#include "Tea.h"CTea::CTea(void){}void CTea::getDrinkName(){cout<<"茶";}double CTea::getDrinkPrice(){double teaPrice = 8;return teaPrice;}CTea::~CTea(void){}
#pragma once#include "drink.h"#include <string>#include <iostream>using namespace std;class CCoffee :public CDrink{public: void getDrinkName(); double getDrinkPrice(); CCoffee(std::string drinkName);~CCoffee(void);std::string mDrinkName;};Coffee.cpp
#include "Coffee.h"CCoffee::CCoffee(std::string drinkName):mDrinkName(drinkName){}void CCoffee::getDrinkName(){cout<<mDrinkName<<"咖啡";}double CCoffee::getDrinkPrice(){double coffeePrice = 10.0;return coffeePrice;}CCoffee::~CCoffee(void){}
DrinkDecorate.h
#pragma once#include "drink.h"#include <iostream>using namespace std;class CDrinkDecorate :public CDrink{public:CDrinkDecorate(CDrink *drink);~CDrinkDecorate(void);virtual void getDrinkName();virtual double getDrinkPrice();protected:CDrink *mDrink;};
DrinkDecorate.cpp
#include "DrinkDecorate.h"CDrinkDecorate::CDrinkDecorate(CDrink *drink):mDrink(drink){}void CDrinkDecorate::getDrinkName(){}double CDrinkDecorate::getDrinkPrice(){return 0;}CDrinkDecorate::~CDrinkDecorate(void){}
DrinkDecorateMilk.h
#pragma once#include "drinkdecorate.h"#include <iostream>#include <string>using namespace std;class CDrinkDecorateMilk :public CDrinkDecorate{public:CDrinkDecorateMilk(CDrink *drink);~CDrinkDecorateMilk(void);void getDrinkName();double getDrinkPrice();};
#include "DrinkDecorateMilk.h"CDrinkDecorateMilk::CDrinkDecorateMilk(CDrink *drink):CDrinkDecorate(drink){}void CDrinkDecorateMilk::getDrinkName(){if (mDrink){mDrink->getDrinkName();}cout<<"加牛奶";}double CDrinkDecorateMilk::getDrinkPrice(){double total = 6.0;if (mDrink){total += mDrink->getDrinkPrice();}return total;}CDrinkDecorateMilk::~CDrinkDecorateMilk(void){}
DrinkDecorateSuger.h
#pragma once#include "drinkdecorate.h"#include <string>using namespace std;class CDrinkDecorateSuger :public CDrinkDecorate{public:CDrinkDecorateSuger(CDrink *drink);~CDrinkDecorateSuger(void);void getDrinkName();double getDrinkPrice();};
DrinkDecorateSuger.cpp
#include "DrinkDecorateSuger.h"CDrinkDecorateSuger::CDrinkDecorateSuger(CDrink *drink):CDrinkDecorate(drink){}void CDrinkDecorateSuger::getDrinkName(){if (mDrink){mDrink->getDrinkName();}cout<<"加糖";}double CDrinkDecorateSuger::getDrinkPrice(){double total = 4;if (mDrink){total += mDrink->getDrinkPrice();}return total;}CDrinkDecorateSuger::~CDrinkDecorateSuger(void){}
main.cpp
#include "Drink.h"#include "Coffee.h"#include "Tea.h"#include "DrinkDecorate.h"#include "DrinkDecorateMilk.h"#include "DrinkDecorateSuger.h"int main(){CDrink * drink = new CCoffee("摩卡");CDrink * coffee = new CDrinkDecorateMilk(drink);CDrink * ddcoffee = new CDrinkDecorateSuger(coffee);CDrink * nCoffee = new CDrinkDecorateSuger(ddcoffee);nCoffee->getDrinkName();cout<<"费用总计:"<<nCoffee->getDrinkPrice()<<endl;delete nCoffee;delete ddcoffee;delete coffee;delete drink;getchar();}
0 0
- 设计模式学习---装饰者
- 设计模式学习--装饰者模式
- 设计模式学习之装饰者模式
- 学习:设计模式之装饰者模式
- 设计模式学习-Decorator装饰者模式
- 设计模式实例学习-装饰者模式
- hjr学习-设计模式:装饰者模式
- 设计模式-装饰者模式学习笔记
- 设计模式学习之装饰者模式
- 设计模式学习--装饰
- 设计模式学习----装饰模式
- 设计模式学习-----装饰模式
- 学习设计模式--装饰模式
- 设计模式学习--装饰模式
- 设计模式学习--装饰模式
- 学习设计模式-装饰模式
- 设计模式学习:装饰模式
- 设计思想学习—装饰者模式
- 数据结构实验-停车场模拟系统
- 总结oninput、onchange与onpropertychange事件的用法和区别
- NET 2.0(C#)调用ffmpeg处理视频的方法
- 将突破保存到本地相册
- Yelp app是如何使用Glide优化图片加载的
- 设计模式学习---装饰者
- getspent
- tomcat学习(三) tomcat窗口名称修改
- 第十一章 线程
- redhat和Ubuntu网络配置文件
- [LeetCode] 9. Palindrome Number
- voicewo在线语音识别转换jQuery插件
- 整理View的相关知识
- Solr schema.xml中无法使用非string类型(long,int)的id问题