设计模式–策略模式C++实现

策略模式C++实现

1定义

(Strategy Pattern)定义一组算法,将每个算法都封装起来,并且使他们可以相互替换

也叫政策模式

2类图

设计模式--策略模式C++实现

3实现

class Strategy
{

protected:

  Strategy();

public:

  virtual ~Strategy() = 0;

  virtual void doSomething()=0;

};

class ConcreteStrategy1:public Strategy

{

public:

  void doSomething()

  {

    cout << "具体策略1的运算法则"<<endl;

  }

};

class ConcreteStrategy2:public Strategy

{

public:

  void doSomething()

  {

    cout << "具体策略1的运算法则"<<endl;

  }

};

//封装角色

class Context

{

private:

  Strategy * _str;

public:

  Context(Strategy * st)

    :_str(st)

  {}

  void doAnything()

  {

    _str->doSomething();  

  }

};

void Test

{

  Strategy * st = new ConcreteStrategy1();

  Context *con = new Context(st);

  con->doAnything();

}

4应用

①优点

算法可以自由切换

避免使用多重条件判断.将决策权转接给高层,你传入策略我执行该就可以

扩展性良好

②缺点

策略数量增多

所有的策略类都会暴漏在外,上层必须知道具体策略

注:这个缺点是可以通过其他方式进行弥补的eg工厂方法,代理模式,享元模式

5使用场景

多个类只有在算法上稍有不同

算法需要自由切换

需要屏蔽算法规则的地方。(仿函数类似)

 

注意事项,一个策略家族的具体策略数量不得超过4个,否则使用混合模式解决策略类膨胀和对外暴漏的问题。

6扩展

枚举策略

定义:它是一个枚举,浓缩了策略模式的枚举

枚举特性:pubic,finaly,static

所以在C++中其实就是一个一个类封装多个静态方法。(一半用作不经常改变的角色)

eg  Strategy::ADD();

  Strategy::Sub();....

 

原文链接: https://www.cnblogs.com/lang5230/p/5328508.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    设计模式--策略模式C++实现

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/230992

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午2:51
下一篇 2023年2月13日 下午2:51

相关推荐