策略模式是一种行为型设计模式(behavioral pattern),用于将不同的算法(算法之间的关系是平行的,也即,它们可以解决相同的问题,只不过采取了不同的策略,比如用于聚类的 Kmeans,FCM之间)封装在不同的类中,也即策略模式用于组织解决同一问题不同算法,以方便客户端(也即是下文的 Context 类)灵活地调用。最终得到算法的替换、变化可以独立于客户端完成。

其 UML 类图关系如下:

class Strategy
{
public:virtual ~Strategy(){}virtual void exec() = 0;
};class StrategyA :public Strategy
{
public:void exec(){cout << "StrategyA::exec()" << endl;}
};class StrategyB :public Strategy
{
public:void exec(){cout << "StrategyB::exec()" << endl;}
};class Context
{
public:explicit Context(Strategy* strategy):_strategy(strategy){}void set_strategy(Strategy* strategy){ _strategy = strategy; }void exec(){ _strategy->exec();}
private:Strategy* _strategy;
};

我们再来看客户端的调用情况:

int main(int, char**)
{StrategyA sa;StrategyB sb;Context ca(&sa);Context cb(&sb);ca.exec();cb.exec();cout << "=========================" << endl;ca.set_strategy(&sb);cb.set_strategy(&sa);// 客户端,也即Context对象,可十分方便的切换切换自己的算法ca.exec();cb.exec();return 0;
}

最终的运行结果是:

StrategyA::exec()
StrategyB::exec()
=========================
StrategyB::exec()
StrategyA::exec()

C++ 设计模式 —— 策略模式(Strategy)相关推荐

  1. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  2. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  3. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  4. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  5. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  6. 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?

    文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...

  7. 设计模式 – 策略模式(Strategy)

    2019独角兽企业重金招聘Python工程师标准>>> 实例:商店促销 (1)首先考虑用简单工厂模式进行设计 Ø  客户端代码Main.java package com.yilong ...

  8. 设计模式 - 策略模式Strategy

    策略模式(Strategy): 定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 1 using System; 2 using System.Co ...

  9. 设计模式——策略模式( Strategy Pattern )

    写代码超过千行,自定义类10个以上,往往写着写着就觉的乱,最终决定抽空补习下设计模式方面的知识.本来AS3出了本关于设计模式的书的,国人也翻译了.我同事也早早买了一本,但前些天我借来看了几页,翻译的太 ...

  10. Java设计模式-策略模式(Strategy)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...

最新文章

  1. AI工程师面试屡被拒:比贫穷脱发更恐怖的是,2020年你仍不会……
  2. Science:细胞如何测量自身的大小?答案是:DNA含量
  3. 《2021全球脑科学发展报告》发布
  4. 连载《一个程序猿的生命周期》- 32、两个企业急着上项目,紧急赶赴现场了解情况...
  5. linux 7.0修改网卡ip,CentOS7修改网卡为静态IP
  6. (转)java类初始化顺序 - jackyrong的世界 - 博客园
  7. 启发式搜索给神经网络_神经科学如何支持UX启发式
  8. servlet文件上传下载_Servlet上传文件和下载文件示例
  9. 前端学习笔记系列一:1.export default / export const
  10. 室内定位程序_在哪都能找到你!苹果新iPhone将支持UWB高精度室内定位
  11. Javascript:模拟ztree侧边栏的回收
  12. Unity3D(三)材质
  13. [算法导论] 邮递员问题
  14. java杯子换水_水壶问题(向水壶中倒z升水) Water and Jug Problem
  15. 照片识别出错_8款文字识别工具,只要拍个照,文字马上可编辑
  16. VB.net下使用开源免费三维控件Anycad的应用实例分享
  17. CSGO显示FPS(帧数)指令集设置调用方法 2020年最新版本CSGO教程
  18. VS2019 关闭安全检查
  19. 黄金周未来景区游客涨6倍 阿里巴巴数字经济体引领体验式消费升级
  20. 服务器生成微信sign,签名生成方法

热门文章

  1. redis启动以及开机自启动
  2. Spark SQL介绍和特点
  3. spark的UI界面解析
  4. Scala实现WordCount
  5. jedis操作set_使用 JedisAPI 操作 Redis
  6. spark加载数据的方式
  7. Mysql的远程连接
  8. Python数据结构实战——队列(Queue)
  9. Linux环境SOCKET编程3:压力测试
  10. Bootstrap-Table事件和方法