策略模式,它定义了一些算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变换,不会影响到客户。以下以商场打折为例:
class CashSuper
{
public:
virtual double acceptCash(double money) = 0;
};
class CashNormal : public CashSuper
{
public:
double acceoptCash(double money)
{
return money;
}
};
class CashRebate : public CashSuper
{
private:
double moneyRebate = 1.0;
public:
double CashRebate(CString moneyRebate)
{
moneyRebate = atof(moneyRebate.GetBuffer());
moneyRebate.ReleaseBuffer();
}
double acceptCash(donble money)
{
return money*moneyRebate;
}
};
//以下策略略。。。
class CashContex
{
private:
CashSuper cash;
public:
CashContex(CashSuper super)
{
cash = super;
}
double GetResult(double money)
{
cash.acceptCash(money);
}
};
其实如果光是用策略模式来实现商场打折收费的话,会造成客户端去判断算法,若能把策略模式和简单工厂模式结合起来,则可以减少客户端的代码量,修改CashContext类即可
class CashContext
{
private:
CashSuper *cs = NULL;
public:
CashContext (std::string type)
{
switch (type)
{
case "正常收费"
CashNormal *cs0 = new CashNormal();
cs = cs0;
break;
// case .....
}
}
double GetResult(double money)
{
return cs->acceptCash(money);
}
};
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。