策略模式将算法封装到一个类里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现
将算法的逻辑抽象接口封装到一个类中,再通过委托的方式将具体的算法实现委托给具体的策略类来实现。
代码实例:
#include <iostream>
using namespace std;
基类:
{
public:
virtual double acceptCash(double money) = 0;
};
正常收费类:
{
public:
double acceptCash(double money)
{
return money;
}
};
打折收费类:
{
private:
double rebate;
public:
cashRebate(double money_rebate)
{
rebate = money_rebate;
}
double acceptCash(double money)
{
/* double rebate;
cout<<"please input rebate: ";
cin>>rebate; */
return money * rebate;
}
};
返钱收费类:
{
private:
double moneyCondition;
double moneyReturn;
public:
cashReturn(double Condition, double Return)
{
moneyCondition = Condition;
moneyReturn = Return;
}
double acceptCash(double money)
{
double result;
result = money - int(money/moneyCondition) * moneyReturn;
return result;
}
};
策略类:
{
private:
cashSuper *m_cs;
public:
cashContext(cashSuper *cs)
{
m_cs = cs;
}
~cashContext()
{
delete m_cs;
}
double getResult(double money)
{
return m_cs->acceptCash(money);//一定记着不能用m_cs.acceptCash(money)
}
};
int main()
{
//正常收费
double money = 500;
/*
cashContext cashContext(new cashNormal());
double normal = cashContext.getResult(money);
cout<<"正常收费: \n"<<normal<<"\n";
cashContext cashContext(new cashRebate(0.5));
double result = cashContext.getResult(money);
cout<<"打折收费: \n"<<result<<"\n";
*/
cashContext cashContext(new cashReturn(500, 30));
double result = cashContext.getResult(money);
cout<<"返钱收费: \n"<<result<<"\n";
return 0;
}