一. 举例说明

以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法。

结构如下:

Algorithm:抽象类,提供算法的公共接口。

RSA_Algorithm:具体的RSA算法。

DES_Algorithm:具体的DES算法。

BASE64_Algorithm:具体的Base64算法。

在使用过程中,我只需要对外公布Algorithm_Context这个类及接口即可。

代码实现:

  1. //策略类
  2. class Algorithm
  3. {
  4. public:
  5. virtual void calculate() = 0;
  6. };
  7. //具体RSA算法
  8. class RSA_Algorithm : public Algorithm
  9. {
  10. public:
  11. void calculate() { cout<<"RSA algorithm..."<<endl; }
  12. };
  13. //具体DES算法
  14. class DES_Algorithm : public Algorithm
  15. {
  16. public:
  17. void calculate() { cout<<"DES algorithm..."<<endl; }
  18. };
  19. //具体Base64算法
  20. class BASE64_Algorithm: public Algorithm
  21. {
  22. public:
  23. void calculate() { cout<<"Base64 algorithm..."<<endl; }
  24. };
  25. //策略上下文
  26. class Algorithm_Context
  27. {
  28. private:
  29. Algorithm *m_ra;
  30. public:
  31. Algorithm_Context(Algorithm *ra) { m_ra = ra; }
  32. ~Algorithm_Context() { delete m_ra; }
  33. void calculate() { m_ra->calculate(); }
  34. };
  35. //测试代码
  36. int main()
  37. {
  38. Algorithm_Context context(new RSA_Algorithm()); //使用具体算法
  39. context.calculate();
  40. return 0;
  41. }

一.
策略模式

定义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此算法的变化,不会影响到使用算法的客户。

这里的关键就是将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实现委托给具体的 Strategy 类来实现(ConcreteStrategeA类)。

设计模式C++描述----15.策略(Strategy)模式的更多相关文章

  1. 设计模式C++实现(1)——策略(Strategy)模式

    目录 策略模式 应用案例 实现的关键 Talk is cheap,let's See The Code 设计思想 参考 策略模式 策略模式定义了一系列算法和行为(也就是策略),他们可以在运行时相互替换 ...

  2. 《Head First 设计模式》ch.1 策略(Strategy)模式

    策略模式 定义了算法族,分别封装起来,让它们可以互相替换,让算法的变化独立于使用算法的客户. 模式名词的意义 威力强大,交流的不止是模式名称,而是一整套模式背后所象征的质量.特性.约束 用更少的词汇做 ...

  3. 策略(strategy)模式

    Head First一书中对于策略(strategy)模式的正式定义是:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 为了介绍这个算法,书中讲了 ...

  4. Java 实现策略(Strategy)模式

    策略模式:行为型模式 将同一行为,不同的处理算法分别封装起来.让它们之间能够互相替换 1. 定义一个超类型接口,及 行为方法 2. 定义不同的实现类,实现该行为的 不同的算法 /** * 策略模式:针 ...

  5. 《图解设计模式》读书笔记4-2 STRATEGY模式

    目录 示例程序 角色 想法 Strategy模式即策略模式,在编程中,策略指的就是算法.利用此模式可以整体替换算法,即使用不同方式解决同一个问题.比如设计一个围棋程序,通过切换算法可以方便地切换AI的 ...

  6. C++设计模式实现--策略(Strategy)模式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/L_Andy/article/details/30489331 一. 举例说明 曾经做了一个程序,程序 ...

  7. Head First 设计模式 - 01. 策略 (Strategy) 模式

    当涉及到"维护"时,为了"复用"目的而使用继承,结局并不完美 P4 对父类代码进行修改时,影响层面可能会很大 思考题 利用继承来提供 Duck 的行为,这会导致 ...

  8. Java设计模式透析之 —— 策略(Strategy)

    今天你的leader兴致冲冲地找到你,希望你能够帮他一个小忙.他如今急着要去开会.要帮什么忙呢?你非常好奇. 他对你说.当前你们项目的数据库中有一张用户信息表.里面存放了非常用户的数据.如今须要完毕一 ...

  9. 设计模式C++描述----09.桥接(Bridge)模式

    一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP ...

随机推荐

  1. Linux 远程登录命令telnet

    一.telnet简介: telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准 ...

  2. Hyperion: Building the Largest In memory Search Tree

    Introduction 索引在数据管理中起到很重要的作用,很多索引结构都会采用访问速度快而且内存消耗少的trie树,但一般常见的trie树索引结构都强调效率而忽视内存的效率,他们的效率虽然高,但内存 ...

  3. java架构之路-(面试篇)Mysql面试大全

    说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案. 1.索引是什么 ...

  4. MySQL InnoDB如何保证事务特性

    如果有人问你"数据库事务有哪些特性"?你可能会很快回答出原子性.一致性.隔离性.持久性即ACID特性.那么你知道InnoDB如何保证这些事务特性的吗?如果知道的话这篇文章就可以直接 ...

  5. MongoDB 学习笔记之 Nested doc/DBRef (Spark)

    Nested doc/DBRef (Spark) 实现: 运行结果:

  6. 分库分表(3) ---SpringBoot + ShardingSphere 实现读写分离

    分库分表(3)---ShardingSphere实现读写分离 有关ShardingSphere概念前面写了两篇博客: 1.分库分表(1) --- 理论 2. 分库分表(2) --- ShardingS ...

  7. Nebula 架构剖析系列(一)图数据库的存储设计

    摘要 在讨论某个数据库时,存储 ( Storage ) 和计算 ( Query Engine ) 通常是讨论的热点,也是爱好者们了解某个数据库不可或缺的部分.每个数据库都有其独有的存储.计算方式,今天 ...

  8. hibernate 搭建框架

    需要用的包 Hibernate的日志记录: * Hibernate日志记录使用了一个slf4j: * SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具 ...

  9. js对象参考手册 -戈多编程

    今天来总结下常用的熟记的js api (一)JavaScript对象 (1)Array 对象属性:(3个) constructor lengh prototype 对象方法:(14个) contat( ...

  10. 【NOIP2013】花匠

    Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较 ...