C++设计模式之策略模式(Strategy)
Strategy策略模式
作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
UML图:
代码实现
#include <iostream>
using namespace std;class Strategy {
public:~Strategy() {}virtual void AlgrithmInterface() = 0;
protected:Strategy() {}
};class ConcreteStrategyA : public Strategy {
public:ConcreteStrategyA() {}~ConcreteStrategyA() {}virtual void AlgrithmInterface() { cout << "ConcreteStrategyA::AlgrithmInterface" << endl; }
};class ConcreteStrategyB : public Strategy {
public:ConcreteStrategyB() {}~ConcreteStrategyB() {}virtual void AlgrithmInterface() { cout << "ConcreteStrategyB::AlgrithmInterface" << endl; }
};/*这个类是Strategy模式的关键,也是Strategy模式和Template模式的根本区别所在。*Strategy通过“组合”(委托)方式实现算法(实现)的异构,而Template模式则采取的是继承的方式这两个模式的区别也是继承和组合两种实现接口重用的方式的区别
*/
class Context {
public:Context(Strategy* strategy) { this->_strategy = strategy; }~Context() { delete this->_strategy; }void DoAction() { this->_strategy->AlgrithmInterface(); }
private:Strategy* _strategy;
};int main()
{/*Strategy模式和Template模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。这两种方式各有优缺点*/Strategy* pStr = new ConcreteStrategyA(); //策略A与B可替换Context* pcon = new Context(pStr);pcon->DoAction();pStr = new ConcreteStrategyB();pcon = new Context(pStr);pcon->DoAction();return 0;
}
输出结果:
参考资料
1. C++设计模式-Strategy策略模式
C++设计模式之策略模式(Strategy)相关推荐
- 锈才学设计模式之 —— 策略模式(Strategy Pattern)
锈才学设计模式之 -- 策略模式 策略模式:把功能提供者单独封装成类,使它们可以互相替换使用,让功能提供者独立于使用者(调用者). 说明: 在面向对象编程中,我们尽量将功能(类)设计成复用,以符合O ...
- 8.6 GOF设计模式四: 策略模式… Strategy Pattern
策略模式- Strategy Pattern 在POS系统中,有时需要实行价格优惠, 该如何处理? 对普通客户或新客户报全价 对老客户统一折扣5% 对大客户统一折扣10% 注:课件 ...
- 二十四种设计模式:策略模式(Strategy Pattern)
策略模式(Strategy Pattern) 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操 ...
- 设计模式之策略模式(Strategy)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式实战-策略模式(Strategy Pattern)
0 联系我 图片标题 1.Q群[Java开发技术交流]:jq.qq.com/?_wv=1027&a- 2.完整博客链接:www.shishusheng.com 3.知乎:www.zhihu.c ...
- 设计模式之策略模式(strategy)--游戏角色使用武器
策略模式:定义了算法族,并且让算法之间可以相互替换,它可以将算法实现和算法的使用客户独立. 转载于:https://www.cnblogs.com/beyondwcm/archive/2007/11/ ...
- Java设计模式之——策略模式(Strategy)
一.例子 令狐冲被岳不群罚在思过崖上面壁思过.偶然的机会发现崖内有一个后洞,石壁上刻有魔教十长老尽破五岳剑派的图形招式.所有五岳剑派引以为豪的精微奥妙招式尽数被破得干干净净,包括一些已经失传的招式. ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 解读设计模式----策略模式(Strategy Pattern)
一.模式概述 策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法. 在我应 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
最新文章
- Linux 常用命令——df, du, ln
- selenium.common.exceptions.SessionNotCreatedException
- vscode 中搭建Vue.js
- Java并发编程—Atomic原子类
- 深度学习之基于卷积神经网络实现花朵识别
- python输出结果为none_python的reverse函数翻转结果为None的问题
- 给排水规范大全2020_住宅电气、给排水、消防安装工程的质量通病分析
- Ajax 六. JSON数据解析
- 用Python打造一款智能语音聊天小软件!
- 记录关于微信开放平台扫码登录的问题
- NB物联网之天翼物联(7)——一次性通过电信NB平台自助测试
- 独家对话行癫:最详解密阿里云顶层设计和底层逻辑
- 锁定计算机是什么意思6,文件处于锁定状态是什么意思?
- 深度学习图片分类实战学习
- 浅析Js中${}字符串拼接
- python小作业8代码(列表的遍历与嵌套)
- D365 CRM 在视图中添加自定义图标
- cm-14.1 Android系统启动过程分析(4)-init进程的启动、rc脚本解析、zygote启动、属性服务
- 2022最新408考纲
- 九大PHP开源Wiki(维基百科)程序评测
热门文章
- (转)会议期刊论文发表介绍(计算机科学领域)
- JAVA异常处理、常用类、反射、集合
- php if终止,php判断用户是否掉线及关闭网页的方法分享
- pkill mysql_每天一个linux命令:kill命令
- java主类型_Java主类结构:基本数据类型
- 在linux下dns绑定域名,在Linux系统中,使用Bind搭建DNS域名解析服务
- php 去除 html 属性,用PHP 去掉所有html标签里的部分属性
- Python HTMLCalendar类| 带实例的formatyear()方法
- python如何操作oracle数据库_python操作oracle数据库
- 汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)