C++重写《大话设计模式》中模式实例四(策略模式)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++重写《大话设计模式》中模式实例四(策略模式),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2438字,纯文字阅读大概需要4分钟。
内容图文
![C++重写《大话设计模式》中模式实例四(策略模式)](/upload/InfoBanner/zyjiaocheng/855/44976bfbaa004419a4d1309239cc2ae0.jpg)
(声明:如果想看实例详细解析,请看《大话设计模式》,这里文章只是为了加深学习设计模式印象而自己用C++程序写一遍,以及把代码共享给大家。仅仅是把C#语言换成C++表述,不对书中的程序和例子是否合适做个人表述。)
其实策略模式和简单工厂模式十分相似,一个很明显的不同是把初始化类的“判断”放在了客户端,这样的话,增加某一个策略子类的时候,只需要修改客户端就可以,不需要修改其他类。但是,它缺点是把更多的类和细节暴露给了客户端。
可以参考我简单工厂模式文章:https://blog.csdn.net/qq_34784043/article/details/82925158
UML图:
CashSuper.h
#pragma once
#include <iostream>
//现金收费抽象类
class CashSuper {
public:
virtual double acceptCash(double money) = 0;
};
//正常收费子类
class CashNormal :public CashSuper {
public:
virtual double acceptCash(double money) {
return money;
}
};
//打折收费子类
class CashRebate :public CashSuper {
private:
double moneyRebate;
public:
CashRebate(double moneyRebate) {
this->moneyRebate = moneyRebate;
}
virtual double acceptCash(double money) {
return money;
}
};
//返利收费子类
class CashReturn :public CashSuper {
private:
double moneyCondition;
double moneyReturn;
public:
CashReturn(double moneyCondition, double moneyReturn) {
this->moneyCondition = moneyCondition;
this->moneyReturn = moneyReturn;
}
virtual double acceptCash(double money) {
double result = money;
if (money >= moneyCondition) {
result = money - int(money / moneyCondition)*moneyReturn;
}
return result;
}
};
CashContent.h:
#pragma once
#include "CashSuper.h"
class CashContext {
private:
CashSuper *cs;
public:
//传入具体收费策略
CashContext(CashSuper *csuper) {
cs = csuper;
}
~CashContext() { delete cs; }
//获得计算结果
double GetResult(double money) {
return cs->acceptCash(money);
}
};
main.cpp:
#include "CashContext.h"
#include <cstdlib>
int main() {
double total = 0;//用于总计
CashContext *cc = NULL;
enum Stragy { 正常收费, 满300返100, 打8折 }stragy;
stragy = 满300返100;
char* str = "";
switch (stragy)//选择对应策略
{
case 正常收费:
str = "正常收费";
cc = new CashContext(new CashNormal);
break;
case 满300返100:
str = "满300返100";
cc = new CashContext(new CashReturn(300, 100));
break;
case 打8折:
str = "打8折";
cc = new CashContext(new CashRebate(0.8));
break;
default:
break;
}
double totalPrices = 0;
double Price = 500;//商品价格
int count = 2;//商品数量
totalPrices = cc->GetResult(Price*count);//原价格500
total = total + totalPrices;
std::cout << "单价:" << Price << " 数量:" << count << " " << str << " 合计:" << totalPrices << std::endl;
delete cc;
system("pause");
return 0;
}
运行结果:
内容总结
以上是互联网集市为您收集整理的C++重写《大话设计模式》中模式实例四(策略模式)全部内容,希望文章能够帮你解决C++重写《大话设计模式》中模式实例四(策略模式)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。