设计模式(三)strategy
来源:互联网 发布:单片机红绿灯电路图 编辑:程序博客网 时间:2024/06/07 07:24
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); //多态调用 //... } };
结构:
阅读全文
0 0
- 设计模式(三)strategy
- 设计模式之三 --- 策略模式(Strategy Pattern) (java)
- 设计模式(三)[策略(Strategy)模式]
- 设计模式三 strategy策略模式
- 设计模式(三)Strategy,Chain of Responsibility
- (4)设计模式:Strategy
- C++设计模式(十一) strategy模式
- 设计模式----策略模式(Strategy)
- 设计模式--策略模式(Strategy)
- 设计模式C++(Strategy策略模式)
- 设计模式---策略模式(strategy)
- java 设计模式--策略模式(strategy)
- 【设计模式】之策略模式(Strategy)
- 设计模式之--策略模式(Strategy)
- 设计模式C++(Strategy策略模式)
- 设计模式(一)Strategy - 策略模式
- 设计模式之策略(strategy)模式
- 设计模式之策略模式(Strategy)
- spring-boot使用教程之三:如何使用sts中的热部署来降低代码开发量
- 九度1468
- Makefile中的$(addprefix)
- 从RCNN到Faster RCNN的原理剖析
- Git命令
- 设计模式(三)strategy
- 几种主要的分布
- RNN Sequence Labeling
- JAVA基础——变量,常量
- set_unique
- 玩转AppBarLayout,更酷炫的顶部栏
- jsp的运行原理及使用
- 《Advanced Bash-scripting Guide》学习(七):描述、列表和确定是否可以安装一个rpm包
- 2017.6.26 学习记录 MyEclipse的基础复习及代码