一、策略模式
核心思想:Strategy 模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
//策略基类
class CashSuper
{
public:
virtual double AcceptMoney(double money) = 0;
};
//策略实现1
class CashNormanl : public CashSuper
{
double AcceptMoney(double money)
{
return money;
}
};
//策略实现2
class CashRebate : public CashSuper
{
private:
double discount; //折扣
public:
CashRebate(double dis)
{
discount = dis;
}
double AcceptMoney(double money)
{
return money * discount;
}
};
//策略实现3
class CashReturn : public CashSuper
{
private:
double moneyCondition; //满足条件
double moneyReturn; //返现值
public:
CashReturn(double mc, double mr)
{
moneyCondition = mc;
moneyReturn = mr;
}
double AcceptMoney(double money)
{
double result = money;
if (money >= moneyCondition)
{
result = money - floor(money / moneyCondition) * moneyReturn;
}
return result;
}
};
//策略上下文,对策略进行二次封装
class CashContext
{
private:
CashSuper *cs;
public:
CashContext(const string &str)
{
if (str == "正常收费")
{
cs = new CashNormanl();
}
else if(str == "打9折")
{
cs = new CashRebate(0.9);
}
else if (str == "满300减200")
{
cs = new CashReturn(300, 200);
}
}
double GetResult(double money)
{
return cs->AcceptMoney(money);
}
};
int main()
{
double money = 1000;
CashContext *cc = new CashContext("满300减200");
cout << cc->GetResult(money) << endl;
return 0;
}
具体理论知识可参考:策略模式(策略设计模式)详解
文档参考:大话设计模式