设计模式之策略模式

在绝对不变的情况下,如一周七天,可以用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();

}

 

    ~SalesOrder(){

    delete this->strategy;

}

public double CalculateTax(){

           //......

           Context context();

            double val = strategy->Calculate(context).;

}

 

};

设计模式之策略模式