设计模式(三)strategy
2017-06-26 22:12
375 查看
1.使用场景:某些对象使用的算法可能多种多样,经常改变,将算法与对象本身解耦。
2.理论依据:虚函数、多态
3.定义:定义一系列算法,把他们一个个封装起来,并且使它们可互相
替换(变化),该模式使得算法可独立于使用他的客户程序(稳定)而变化(拓展,子类化)
4.步骤:定义算法基类(含纯虚函数的算法函数),利用多态调用基类的派生类算法
5.技法:紧耦合->松耦合
6.变化:运行时调用的函数
不变:调用的算法基类
原代码:
enum TaxBase { CN_Tax, US_Tax, DE_Tax, FR_Tax //更改 }; class SalesOrder{ TaxBase tax; public: double CalculateTax(){ //... if (tax == CN_Tax){ //CN*********** } else if (tax == US_Tax){ //US*********** } else if (tax == DE_Tax){ //DE*********** } else if (tax == FR_Tax){ //更改 //... } //.... } };
strategy设计模式代码:
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{ public: virtual double Calculate(const Context& context){ //*********** } }; class DETax : public TaxStrategy{ public: virtual double Calculate(const Context& context){ //*********** } }; //扩展 //********************************* class FRTax : public TaxStrategy{ public: 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); //多态调用 //... } };
结构:
相关文章推荐
- 深入浅出设计模式-学习笔记(1) Strategy
- Strategy设计模式
- 设计模式之Strategy(策略)
- 设计模式随笔系列:鸭子-策略模式(Strategy)[原]
- 设计模式与泡mm的关系之strategy策略模式及再思考
- 设计模式之Strategy(策略)
- ACE中的设计模式(3)——Strategy
- 设计模式简单代码之Strategy模式
- 设计模式之Strategy(策略)
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- 设计模式之Strategy(策略)
- [设计模式(一)]template method模式和strategy模式
- [用设计模式锻炼C#系列]之Strategy
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- 设计模式之Strategy——简历篇
- 设计模式之Strategy——简历篇(原创)
- 设计模式之Strategy——简历篇(原创)
- 设计模式(18)-策略模式(Strategy)
- .Net中的设计模式——Strategy模式
- 设计模式(20)-策略模式(Strategy)