概念:通过定义一系列封装的算法,使得调度者可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

特点:

1)根据不同的情况创建不同的对象。

2)每个对象的方法名相同,但实现却不同。

结构:

1)一个抽象策略

2)多个继承策略

c) 持有一个具体策略类的引用,供客户端使用

  1. #include<iostream>
  2. using namespace std;
  3. /*************************************策略基类****************************************/
  4.  
  5. class IStrategy//主要定义了虚函数
  6. {
  7. public:
  8. virtual void DoOperation()=;//说明是纯虚函数(没有实现的虚函数),必须如此声明
  9. };
  10.  
  11. /*************************************具体策略类****************************************/
  12.  
  13. class StrategyA:public IStrategy//策略子类,主要对父类定义的虚方法进行具体实现
  14. {
  15. public:
  16. void DoOperation()
  17. {
  18. cout<<"OperationA"<<endl;
  19. }
  20. };
  21.  
  22. class StrategyB:public IStrategy//策略子类,主要对父类定义的虚方法进行具体实现
  23. {
  24. public:
  25. void DoOperation()
  26. {
  27. cout<<"OperationB"<<endl;
  28. }
  29. };
  30.  
  31. class StrategyC:public IStrategy//策略子类,主要对父类定义的虚方法进行具体实现
  32. {
  33. public:
  34. void DoOperation()
  35. {
  36. cout<<"OperationC"<<endl;
  37. }
  38. };
  39.  
  40. /*************************************调度类****************************************/
  41.  
  42. class Context //调度类,根据传进来的参数,选择具体某个策略----待优化<参考教程>
  43. {
  44. private:
  45. IStrategy *strategy;
  46.  
  47. public:
  48. Context(IStrategy *child)
  49. {
  50. strategy=child;
  51. }
  52. void DoOperation()
  53. {
  54. strategy->DoOperation();
  55. }
  56.  
  57. };
  58.  
  59. /*************************************客户端****************************************/
  60. int main()
  61. {
  62. cout<<"测试程序"<<endl;
  63.  
  64. //“具体策略类”只在定义多个“调度类”时使用
  65. Context *Context_A = new Context(new StrategyA());
  66. Context *Context_B = new Context(new StrategyB()),
  67. Context *Context_C = new Context(new StrategyC()),
  68. }

c++设计模式之策略模式的更多相关文章

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

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

  2. PHP设计模式之策略模式

    前提: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查 找.排序等,一种常用的方法是硬编码(Hard Cod ...

  3. JavaScript设计模式之策略模式(学习笔记)

    在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选 ...

  4. 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)

    原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...

  5. JavaScript设计模式之策略模式

    所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类 ...

  6. 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查

    原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...

  7. [design-patterns]设计模式之一策略模式

    设计模式 从今天开始开启设计模式专栏,我会系统的分析和总结每一个设计模式以及应用场景.那么首先,什么是设计模式呢,作为一个软件开发人员,程序人人都会写,但是写出一款逻辑清晰,扩展性强,可维护的程序就不 ...

  8. 设计模式入门,策略模式,c++代码实现

    // test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include &quo ...

  9. 设计模式之策略模式和状态模式(strategy pattern & state pattern)

    本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过 ...

  10. python设计模式之策略模式

    每次看到项目中存在大量的if else代码时,都会心生一丝不安全感. 特别是产品给的需求需要添加或者更改一种if条件时,生怕会因为自己的疏忽而使代码天崩地裂,哈哈,本文的目的就是来解决这种不安全感的, ...

随机推荐

  1. hdu 1263 水果

    Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...

  2. FCKeditor 插件开发 示例

    (FCKeditor.地址是:http://www.fckeditor.net/.我下载的版本是:2.6.3.)What ?FCKeditor一直是web上编辑器的比较好的一个选择,他是开源的,而且效 ...

  3. Java Load Properties 文件,定义message信息

    初始化Properties对象,load properties文件: private static final Properties MESSAGERESOURCES = new Properties ...

  4. Front end workflow

    标签:请叫我红领巾 记一哈记一哈 ^_^ 推荐个不错的群 自己刚开始折腾的时候也是无处下手,渺茫啊.然而我是有一个很好的前端群(真的很棒,欢迎加入:[375042952]),关注群里的每一次讨论,每一 ...

  5. HTML布局总结

    网页的三大元素结构(内容html标签)+表现(布局CSS)+行为(js) CSS选择器1.标记选择器2.类别选择器(.red)3.ID选择器(#name)4.复合选择器(交集选择器  标记选择器+类别 ...

  6. c# 输出excel、word实例只需一行代码

    第一.首先下载 WindICFrameNet.dll 下载地址:http://pan.baidu.com/s/1dDBqC9r 第二.前台代码 <div style="display: ...

  7. spring的数据源基本配置

    aplictaionContext-dataSource的配置: <?xml version="1.0" encoding="utf-8"?> &l ...

  8. BZOJ 2436 NOI嘉年华(单调优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2436 题意:两个会场不能同时表演,但是同一个时间可以同时表演,要求让两个会场表演数量最小的最大,然后 ...

  9. 时刻注意QT与Windows系统的不同(惨痛教训)

    其实就一条:WINAPI使用'\',而QT使用'/'.如果程序立刻崩溃的话,是很难看出端倪的,所以要时刻注意...

  10. Non-unique Elements

    Non-unique Elements You are given a non-empty list of integers (X). For this task, you should return ...