#include <iostream>
using namespace std;
class StrategyBase
{
public:
virtual double getResult(const double& dNumber)
{
return 0;
}
};
class StrategyOne : public StrategyBase
{
public:
StrategyOne();
StrategyOne(const double& dPercent) : m_dPercent(dPercent) {}
virtual double getResult(const double& dNumber) override
{
return (dNumber * m_dPercent);
}
private:
double m_dPercent = 0;
};
class Context
{
public:
const double getResult(const double& dNumber)
{
return m_objStrategyBase->getResult(dNumber);
}
void createContext(string strType)
{
if (strType == "打8折")
{
m_objStrategyBase = new StrategyOne(0.8);
}
}
private:
StrategyBase* m_objStrategyBase = nullptr;
};
int main()
{
Context objContext;
objContext.createContext("打8折");
cout << objContext.getResult(100) << endl;
return 0;
}
总结:策略模式和简单工厂结合暴露的接口减少,由Context类管理具体的策略并执行相同的getResult方法多态地得到最后的结果
策略模式
最新推荐文章于 2024-09-11 13:32:44 发布