设计模式C++描述----15.策略(Strategy)模式
一. 举例说明
以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法。
结构如下:
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类)。
设计模式C++描述----15.策略(Strategy)模式的更多相关文章
- 设计模式C++实现(1)——策略(Strategy)模式
目录 策略模式 应用案例 实现的关键 Talk is cheap,let's See The Code 设计思想 参考 策略模式 策略模式定义了一系列算法和行为(也就是策略),他们可以在运行时相互替换 ...
- 《Head First 设计模式》ch.1 策略(Strategy)模式
策略模式 定义了算法族,分别封装起来,让它们可以互相替换,让算法的变化独立于使用算法的客户. 模式名词的意义 威力强大,交流的不止是模式名称,而是一整套模式背后所象征的质量.特性.约束 用更少的词汇做 ...
- 策略(strategy)模式
Head First一书中对于策略(strategy)模式的正式定义是:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 为了介绍这个算法,书中讲了 ...
- Java 实现策略(Strategy)模式
策略模式:行为型模式 将同一行为,不同的处理算法分别封装起来.让它们之间能够互相替换 1. 定义一个超类型接口,及 行为方法 2. 定义不同的实现类,实现该行为的 不同的算法 /** * 策略模式:针 ...
- 《图解设计模式》读书笔记4-2 STRATEGY模式
目录 示例程序 角色 想法 Strategy模式即策略模式,在编程中,策略指的就是算法.利用此模式可以整体替换算法,即使用不同方式解决同一个问题.比如设计一个围棋程序,通过切换算法可以方便地切换AI的 ...
- C++设计模式实现--策略(Strategy)模式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/L_Andy/article/details/30489331 一. 举例说明 曾经做了一个程序,程序 ...
- Head First 设计模式 - 01. 策略 (Strategy) 模式
当涉及到"维护"时,为了"复用"目的而使用继承,结局并不完美 P4 对父类代码进行修改时,影响层面可能会很大 思考题 利用继承来提供 Duck 的行为,这会导致 ...
- Java设计模式透析之 —— 策略(Strategy)
今天你的leader兴致冲冲地找到你,希望你能够帮他一个小忙.他如今急着要去开会.要帮什么忙呢?你非常好奇. 他对你说.当前你们项目的数据库中有一张用户信息表.里面存放了非常用户的数据.如今须要完毕一 ...
- 设计模式C++描述----09.桥接(Bridge)模式
一. 举例 N年前: 计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP ...
随机推荐
- Spring boot 梳理 - 代码结构(Main类的位置)
Spring boot 对代码结构无特殊要求,但有个套最佳实践的推荐 不要使用没有包名的类.没有包名时,@ComponentScan, @EntityScan, or @SpringBootAppli ...
- MongoDB 学习笔记之 手动预先分片
手动预先分片: 目的:手动预先分片是为了防止未来chunk的移动,减少IO. sh.shardCollection("shop.users",{"userId" ...
- 【SQLServer】 查询一个字段里不同值的最新一条记录
查询用户编号为1165的所有数据: ,,,,,) ' order by JianCeID desc 查询用户编号为1165且监测参数为(1,2,7,15,19,20)的最新数据: select * f ...
- BZOJ - 2783 树
数列 提交文件:sequence.pas/c/cpp 输入文件: sequence.in 输出文件: sequence.out 问题描述: 把一个正整数分成一列连续的正整数之和.这个数列必须包含至少两 ...
- C语言--计算数组的平均值
//数组 int main() { ]; double sum = 0.0; ; int x; scanf("%d", &x); ) { muber[cnt] = x; c ...
- Python flask 构建可扩展的restful apl☝☝☝
Python flask 构建可扩展的restful apl☝☝☝ Flask-RESTful是flask的扩展,增加了对快速构建REST API的支持.Flask-RESTful通过最少的设置鼓励最 ...
- eclipse常用快捷键即项目操作
快捷键: 1.代码提示:Alt+/ 2.撤销上一步操作:Ctrl+z:取消撤销:Ctrl+y: 3.如何注销一整段代码?☞▲第一种注释方法是每行代码前加//:先选中,然后按Ctrl+/:取消注销方法一 ...
- Python_散点图绘制
为了可视化一些数据分布,需要以散点图的形式呈现 引入绘图工具 import matplotlib.pyplot as plt from matplotlib.font_manager import F ...
- AWD脚本之批量mysql写shell
摘之工具包中脚本 需要安装mysqldb.windwos环境直接在https://www.codegood.com/archives/129下载MySQL-python-1.2.3.win-amd64 ...
- msf利用- windows内核提权漏洞
windows内核提权漏洞 环境: Kali Linux(攻击机) 192.168.190.141 Windows2003SP2(靶机) 192.168.190.147 0x01寻找可利用的exp 实 ...