在绝对不变的情况下,如一周七天,可以用if else.,实际开发过程中,大多数并不是绝对不变的,所以需要用到Strategy模式,策略模式,含有许多条件判断的代码通常都需要Strategy模式
例1:
enum TaxBase{
CN_Tax,
US_Tax,
DE_Tax
};
class SalesOrder{
TaxBase tax;
public:
double CalculateTax(){
//...
if(tax ==CN_Tax){
/........./...}
else if(Tax ==US_Tax){
//.............}
else if(tax ==DE_Tax){
//...........}
}
}
策略模式 实现例1功能
class TaxStrategy{
public:
virtual double Calculate(const Context& context) = 0;
virtual ~TaxStrategy(){}
};
class CNTax : public TaxStrategy{
public:
virtual double Calculate(const Context& context){
/......................
};
class USTax : public TaxStrategy{
virtual double Calculate(const Context& context){
/......................
}
};
class DETax : public TaxStrategy{
virtual double Calculate(const Context& context){
/......................
}
};
..................下列代码不需要变化,得到了代码的复用性
class SalesOrder{
private:
TaxStrategy* strategy; //多态指针 ,具有多态性.指针指向不同的子类
public:
SalesOrder(StrategyFactory* strategyFactory){
this->strategy = strategyFactory->NewStrategy();
}