设计模式C++描述----15.策略(Strategy)模式
2024-08-30 14:47:12
一. 举例说明
以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法。
结构如下:
Algorithm:抽象类,提供算法的公共接口。
RSA_Algorithm:具体的RSA算法。
DES_Algorithm:具体的DES算法。
BASE64_Algorithm:具体的Base64算法。
在使用过程中,我只需要对外公布Algorithm_Context这个类及接口即可。
代码实现:
- //策略类
- class Algorithm
- {
- public:
- virtual void calculate() = 0;
- };
- //具体RSA算法
- class RSA_Algorithm : public Algorithm
- {
- public:
- void calculate() { cout<<"RSA algorithm..."<<endl; }
- };
- //具体DES算法
- class DES_Algorithm : public Algorithm
- {
- public:
- void calculate() { cout<<"DES algorithm..."<<endl; }
- };
- //具体Base64算法
- class BASE64_Algorithm: public Algorithm
- {
- public:
- void calculate() { cout<<"Base64 algorithm..."<<endl; }
- };
- //策略上下文
- class Algorithm_Context
- {
- private:
- Algorithm *m_ra;
- public:
- Algorithm_Context(Algorithm *ra) { m_ra = ra; }
- ~Algorithm_Context() { delete m_ra; }
- void calculate() { m_ra->calculate(); }
- };
- //测试代码
- int main()
- {
- Algorithm_Context context(new RSA_Algorithm()); //使用具体算法
- context.calculate();
- return 0;
- }
一.
策略模式
定义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此算法的变化,不会影响到使用算法的客户。
这里的关键就是将算法的逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式将具体的算法实现委托给具体的 Strategy 类来实现(ConcreteStrategeA类)。
最新文章
- 关于ubuntu16无线网卡RTL8723BE频繁掉线及信号不足的解决办法
- Java中的四舍五入
- 整理QQ数据库sql语句
- UDP网络通信OSC 协议
- MySQL 基本函数
- POJ 1988
- Makefile 知识点
- Android入门3:从Toolbar到Material Design
- Delphi使用Windows API函数AnimateWindow实现窗体特效
- angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决
- ros 使用笔记
- 监听 input上传文件, 获取文件名称,
- 安装vmware 已经配置Centos7
- love is ... ...
- Python开课复习7
- centos安装pip3
- 第13章 TCP编程(1)_socket套接字
- 根据插件Swipe,结合jQuery封装成的新的jQuery插件
- IDEA 搭建 springmvc maven 项目
- selenium 3.0 键盘事件 +强制结束chromedriver进程代码