封装一系列算法,算法之间互相增加替换,不会影响到客户端,相当于是先定义一个统一接口,然后各个算法继承这个接口实现,然后,再层状一层逻辑调用,客户端只需要调用这个最后封装的类就好了,但是这样的话客户端在算法选择使用的时候需要自己实例化具体算法,所以可以考虑用工厂把这个策略类继续优化下即可。

实现代码(基本策略模式+工厂优化过的)

#pragma once
#include "stdafx.h"
#include<iostream>
#include<windows.h>
using namespace std;//策略模式基本实现
class InterFace {
public:virtual DWORD getValue(const DWORD &numberA ,const DWORD &numberB) = 0;
};class Addition : public InterFace {
public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA + numberB;}
};class Subtrantion :public InterFace {
public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA - numberB;}
};class Strategy {
private:InterFace *mpAlgorithm = NULL;
public:VOID setStrategy(InterFace *pAlgorithm) {mpAlgorithm = pAlgorithm;}DWORD runAlgorithm(const DWORD &numberA ,const DWORD &numberB) {return mpAlgorithm->getValue(numberA , numberB);}
};//策略模式客户端调用
int main()
{Strategy *pstrategy = new Strategy();InterFace *padditon = new Addition();InterFace *psubtrantion = new Subtrantion();pstrategy->setStrategy(padditon);cout<<pstrategy->runAlgorithm(1,1)<<endl;pstrategy->setStrategy(psubtrantion);cout << pstrategy->runAlgorithm(1, 1) << endl;delete pstrategy;delete padditon;delete psubtrantion;getchar();return 0;
}#pragma once
#include "stdafx.h"
#include<iostream>
#include<windows.h>
using namespace std;//工厂简单改下策略模式,减少客户端操作(选择)的复杂度
class InterFace {
public:virtual DWORD getValue(const DWORD &numberA ,const DWORD &numberB) = 0;
};class Addition : public InterFace {
public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA + numberB;}
};class Subtrantion :public InterFace {
public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA - numberB;}
};class Strategy {
private:InterFace *mpNowAlgorithm = NULL;InterFace *mpCacheAlgorithm[2] = {NULL ,NULL};public:Strategy() {mpCacheAlgorithm[0] = new Addition();mpCacheAlgorithm[1] = new Subtrantion();}VOID setStrategy(const DWORD &key) {switch (key) {case 0: mpNowAlgorithm = mpCacheAlgorithm[0]; break;case 1:mpNowAlgorithm = mpCacheAlgorithm[1]; break;default:mpNowAlgorithm = NULL;}}~Strategy() {delete mpCacheAlgorithm[0];delete mpCacheAlgorithm[1];}DWORD runAlgorithm(const DWORD &numberA ,const DWORD &numberB) {return mpNowAlgorithm->getValue(numberA , numberB);}
};//策略模式客户端调用
int main()
{Strategy *pstrategy = new Strategy();pstrategy->setStrategy(0);cout<<pstrategy->runAlgorithm(1,1)<<endl;pstrategy->setStrategy(1);cout << pstrategy->runAlgorithm(1, 1) << endl;delete pstrategy;getchar();return 0;
}

设计模式复习-策略模式相关推荐

  1. 设计模式之策略模式(Java 实现)

    设计模式之策略模式(Java 实现) 大家一定都使用过电子地图.在地图中输入出发地和目的地,然后再选取你的出行方式,就可以计算出最优线路以及预估的时长.出行方式有驾车.公交.步行.骑行等.出行方式不同 ...

  2. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  3. 换个姿势学设计模式:策略模式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...

  4. 研磨设计模式之 策略模式--转

    http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式   2010-09-09 作者:云飞龙行 来源:云飞龙行的blog   先感谢众多朋友的支持 ...

  5. 设计模式:策略模式(Strategy)

    定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...

  6. C++设计模式之策略模式(Strategy)

    Strategy策略模式 作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: 代码实现 #include <iostream& ...

  7. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  8. 一篇博客读懂设计模式之-----策略模式

    设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...

  9. 面向对象设计模式之策略模式

    面向对象设计模式之策略模式 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2.抽象鸭子类,鸭子飞行行为在此处类似于算法族 1 package ...

最新文章

  1. IIS7 + Tomcat7 整合共用80端口
  2. 修复cocos2dx的Label,WP8下不能换行的问题
  3. 使用halcon将一个圆上的点拟合成圆形并且求出圆心
  4. QML笔记-使用Row的时候要注意的地方(一定要指明高度和宽度)
  5. jsp前三章测试改错题
  6. php mysql异常捕获_PHP中try{}catch{}的用法及异常处理.对数据库的事物支持
  7. cad相对坐标快捷键_47个快捷键+50个CAD技巧助你玩转CAD
  8. 使用python将windows下多种文件格式转换成PDF格式
  9. Trivial、Non-Trivial和POD类型
  10. 怎么让计算机文件格式显示,已知文件类型的扩展名如何设置显示与隐藏?
  11. Cascade EF-GAN: 局部聚焦渐进式面部表情编辑
  12. 基于腾讯云搭建属于自己的Fiora聊天室
  13. Leetcode-LCP 25. 古董键盘
  14. SOA(面向服务的架构)
  15. c++ - 第19节 - c++11
  16. 基于matlab了光纤模式图,基于matlab光纤的模式图模拟
  17. Tomcat服务器部署工件出错和无法访问网页异常解决
  18. NC14670 脸盆da哥的木桶——牛客
  19. 实现iOS应用图标右上角数字badge number提醒
  20. python小波去噪_python小波变换去噪

热门文章

  1. SpringBoot中使用hikariCP
  2. day26 re正则表达式
  3. Windows Server 2008 配置IE使用代理
  4. linux系统下的grep命令功能与正则表达式详解
  5. 第六章 Realm及相关对象(四) PrincipalCollection
  6. deepin关机卡在图标界面 mysql Community...10min
  7. 数学:拓展中国剩余定理
  8. FreeMarker 语法 include 引用模板
  9. jsp: jstl标签库 uri标签
  10. quick cocos2dx 3.x 配置win32工程