此模式实现计算各个国家的税
//定义一个基类,并将方法定义成虚函数,如果需要添加其他国家税收,只需要让工厂模式支持可分配指针,添加一个子类即可,提高了复用性
class TaxStrategy{
public:
virtual double Calculate(const string &text)=0;
virtual ~TaxStrategy();
};
class CNtax:public TaxStrategy{
public:
virtual double Calculate(const string &text){
}
};
class UStax:public TaxStrategy{
public:
virtual double Calculate(const string &text){
}
};
class Salesorder{
private:
TaxStrategy* strategy;
public:
Salesorder(StractegyFactory* stractegyFactory){//采用工厂模式分配TaxSractegy子类指针,
this->strategy=stractegyFactory->NewStractegy();
}
~Salesorder(){
delete this->strategy;
}
public double CalculateTax(){
string text;
cin>>text;
double val=strategy->Calculate(text);//动态调用,根据工厂模式分配的指针使用需要的子类方法
return val;
}
};
策略模式:定义一系列算法,把他们一个个封装起来,并且使它们可相互替换(变化)。该模式使得算法可独立于使用它的客户进程(稳定)而变化(扩展,子类化)。
此例中,不变的是Salesorder和Taxstrategy类,变化的是增加继承Taxstrategy子类,从而实现增加计算别的国家的税,主要是消除了大量的if else,增加了代码的复用性,并顺带提高了效率