#include <iostream>
using namespace std;
class CashSuper
{
public:
virtual double acceptCash(double money) = 0;
};
class CashNormal: public CashSuper
{
public:
double acceptCash(double money)
{
return money;
}
};
class CashRebate: public CashSuper
{
public:
CashRebate(double moneyRebate):m_moneyRebate(moneyRebate){}
double acceptCash(double money)
{
return money * m_moneyRebate;
}
private:
double m_moneyRebate;
};
class CashReturn: public CashSuper
{
public:
CashReturn(double moneyCondition, double moneyReturn):m_moneyCondition(moneyCondition), m_moneyReturn(moneyReturn){}
double acceptCash(double money)
{
double result = money;
if (money >= m_moneyCondition)
{
result = money - (int)(money / m_moneyCondition) * m_moneyReturn;
}
return result;
}
private:
double m_moneyCondition;
double m_moneyReturn;
};
class CashContext
{
public:
CashContext(int type):m_cs(NULL)
{
switch (type)
{
case 1:
m_cs = new CashNormal;
break;
case 2:
m_cs = new CashReturn(300, 100);
break;
case 3:
m_cs = new CashRebate(0.8);
break;
}
}
double GetResult(double money)
{
double result = -1;
if (m_cs)
result = m_cs->acceptCash(money);
return result;
}
private:
CashSuper * m_cs;
};
int main()
{
CashContext cc1(1);
cout << cc1.GetResult(389) << endl;
CashContext cc2(2);
cout << cc2.GetResult(602) << endl;
CashContext cc3(3);
cout << cc3.GetResult(389) << endl;
return 0;
}
策略模式
最新推荐文章于 2023-06-11 15:10:32 发布