一. 举例说明

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

结构如下:

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类)。

最新文章

  1. 关于ubuntu16无线网卡RTL8723BE频繁掉线及信号不足的解决办法
  2. Java中的四舍五入
  3. 整理QQ数据库sql语句
  4. UDP网络通信OSC 协议
  5. MySQL 基本函数
  6. POJ 1988
  7. Makefile 知识点
  8. Android入门3:从Toolbar到Material Design
  9. Delphi使用Windows API函数AnimateWindow实现窗体特效
  10. angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决
  11. ros 使用笔记
  12. 监听 input上传文件, 获取文件名称,
  13. 安装vmware 已经配置Centos7
  14. love is ... ...
  15. Python开课复习7
  16. centos安装pip3
  17. 第13章 TCP编程(1)_socket套接字
  18. 根据插件Swipe,结合jQuery封装成的新的jQuery插件
  19. IDEA 搭建 springmvc maven 项目
  20. selenium 3.0 键盘事件 +强制结束chromedriver进程代码

热门文章

  1. Spring Data JPA 梳理 - JPA是什么
  2. line-height属性
  3. ArcGIS Server10.1 动态图层服务
  4. 01、JDBC连接
  5. Java诊断利器Arthas
  6. Spring MVC学习 ( RESTful)
  7. Currying 及应用
  8. Linux入门(用户操作及权限)
  9. Kubernetes之Pod介绍
  10. Python_深拷贝和浅拷贝