设计模式之策略模式

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

}

 

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值