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

C++ 设计模式 – 策略模式-猿说编程
C++ 设计模式 – 策略模式
【开通黄金会员可免费阅读所有付费文章】
5
限时特惠
19.9
源码为站长亲测可以使用,如果下载地址无效,请直接留言或者联系站长
付费阅读
已售 61
ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.策略模式简述

策略模式(Strategy Pattern)定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。Strategy 可以使算法独立于使用算法的客户端。


二.策略模式模式结构

  • Context(环境角色):持有一个对 Strategy 的引用,最终给客户端调用。
  • Strategy(抽象策略):定义了一个公共接口,让不同的算法以不同的方式来实现。通过这个接口,Context 可以调用不同的算法。
  • ConcreteStrategy(具体策略):实现 Strategy 定义的接口,提供具体算法的实现。

三.策略模式优缺点

优点:

  • 各自使用封装的算法,可以很容易地引入新的算法来满足相同的接口。
  • 由于实现的是同一个接口,所以策略之间可以自由切换。
  • Strategy 使客户端能够选择所需的算法,而无需使用 switch/case 或 if/else 语句。
  • 算法的细节完全封装在 Strategy 类中,因此,可以在不影响 Context 类的情况下更改算法的实现。

缺点:

  • 客户端必须知道所有的策略,了解它们之间的区别,以便适时选择恰当的算法。
  • 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。

四.策略模式适用场景

  • 多个类有不同的表现形式,每种表现形式可以独立成单独的算法。
  • 需要在不同情况下使用不同的算法,以后算法可能还会增加。
  • 对客户端隐藏具体算法的实现细节,彼此完全独立。

五.策略模式案例分析

图片[1]-C++ 设计模式 – 策略模式

每天,我们做着同样的工作,遇见同样的人,吃着同样的食物。。。日复一日,年复一年!当生活陷入重复,想遇到新鲜的人,新鲜的事,为苍白的生活添加一些色彩,何不来一场说走就走的旅行呢!

要出去玩,有很多种出行方式,自行车、公交车、自驾、地铁、火车、飞机。。。如何选择最合适的呢?

  • 如果离家近,又怕堵车,可以骑自行车。
  • 如果离家远,但想省钱,早点出发,可以乘公交车。
  • 如果有车,并且不介意支付停车费,可以选择自驾。
  • 如果没有车,但赶时间,可以乘出租车。

这里的每一种出行方式都是一种具体的策略。如何选择,需要基于成本、便利和时间之间的权衡。


六.策略模式代码实现

创建抽象策略

抽象策略由 IStrategy 表示,它提供了一个 Travel() 接口,用于提供出行方式:

/************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): https://www.codersrc.com/archives/21576.html
//@File:C++ 设计模式 –策略模式
//@Time:2023/02/04 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/************************************************************************/


// strategy.h
#ifndef STRATEGY_H
#define STRATEGY_H

// 出行策略
class IStrategy
{
public:
    virtual void Travel() = 0;
};

#endif // STRATEGY_H

1.创建具体策略

有三种具体的策略可供选择,骑自行车、开车、坐火车:


七.猜你喜欢

  1. C++ 设计模式 – 单例模式
  2. C++ 设计模式 – 抽象工厂模式
  3. C++ 设计模式 – 工厂方法模式
  4. C++ 设计模式 – 享元模式
  5. C++ 设计模式 – 桥接模式
  6. C++ 设计模式 – 模版方法模式
  7. C++ 设计模式 – 访问者模式
  8. C++ 设计模式 – 备忘录模式
  9. C++ 设计模式 – 中介者模式
  10. C++ 设计模式 – 策略模式

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容