设计模式之禅-策略模式
1 策略模式有点类似状态模式,不过策略的调用链切换是固定的。
A A can not do -> B B can not do -> C do
2 代码
#include <iostream>
#include <stdio.h>
#include <string>class StrategyBase {
public:virtual void DoOperation(int a, int b) = 0;
};class StrategyDad :public StrategyBase{
public:void DoOperation(int a, int b) {printf("this is dad DoOperation %d\n", a + b);}
};class StrategyHusband :public StrategyBase{
public:void DoOperation(int a, int b) {printf("this is Husband DoOperation %d\n", a - b);}
};class StrategySon :public StrategyBase{
public:void DoOperation(int a, int b) {printf("this is Son DoOperation %d\n", a * b);}
};class Context
{
public:StrategyBase *st;Context(StrategyBase *s) {st = s;}void ExecuteStrategy(int a, int b) {if (st == NULL)st = new StrategyDad();if (a >= 200 || b >= 300) {Swap(new StrategySon);} else if (a >= 20 || b >= 30) {Swap(new StrategyHusband);} else {Swap(new StrategyDad);}st->DoOperation(a, b);}void Swap(StrategyBase *s) {if (st) delete st;st = s;}
};int main()
{Context *ct = new Context(new StrategyHusband());ct->ExecuteStrategy(2, 3);ct->Swap(new StrategyDad);ct->ExecuteStrategy(20, 30);ct->Swap(new StrategySon);ct->ExecuteStrategy(200, 300);return 0;
}
设计模式之禅-策略模式相关推荐
- 读设计模式之禅--策略模式
定义:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换. package design.Strategy;/*** @Author: hyh* @Date: 2021/8/19 14:04* ...
- 设计模式之禅——策略模式(Strategy Pattern)
1.基本概念 在策略模式中,一个类的行为或算法可以在运行时更改.我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象.策略对象改变 context 对象的执行算法. 2. ...
- 读书 | 设计模式之禅 - 策略模式
文章目录 1. 引入策略模式 2. 策略模式定义 3. 策略模式的优点 1. 引入策略模式 智谋无敌的诸葛亮,在刘备去东吴招亲之前,特授以伴郎赵云三个锦囊,说是按天机拆开解决棘手问题. 这三个妙计分别 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 设计模式入门(策略模式)
[0]README 0.1)本文部分文字描述转自 "head first 设计模式",旨在学习 设计模式入门(策略模式) 的基础知识: 0.2)本文章节4和5的source cod ...
- 【设计模式七之策略模式】你有你的张良计,我有我的过墙梯
Strategy模式 细说策略模式 策略模式究竟是什么模式 策略模式的场景 官宣的策略模式 代码展示 代码一 细说策略模式 提示: 博主:章飞 _906285288的博客 博客地址:http://bl ...
- 设计模式 之美 -- 策略模式
策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换.对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户. 基本的UML类图如下: 用户使用S ...
- Java设计模式之十一 ---- 策略模式和模板方法模式
前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...
- 《研磨设计模式》chap17 策略模式(2) 总结
1. 新增加context 上下文类 eg. 发工资:发人民币和发美元 public interface PaymentStrategy {//公司给某人真正支付工资 public void pay( ...
最新文章
- 关于动态规划,你想知道的都在这里了!
- python课程多少钱一节课-日照少儿python编程一节课多少钱
- @MappedSuperclass注解的使用说明
- python 的String,集合(List,元组,Dict)
- Collecting package metadata (current_repodata.json): done Solving environment: failed with repodata
- 通过一个实际例子学习SAP UI5的控件绘制和渲染
- n元n次方程求解c 语言,解n元一次方程
- JAVA中的适配器应用_Java适配器模式详解和实际应用.md
- 探讨Netty获取并检查Websocket握手请求的两种方式
- CUDA C 编程/Nsight可视化
- FTP工具,5款常用的FTP工具
- P4839 P哥的桶 题解
- Lesson 9 Telephone Conversation 1
- 华东之旅--西塘第二天
- 计算机无法ghost安装系统安装系统安装,详细教您重装Ghost系统错误怎么办
- OpenSIPS实战(八):修改sip消息-使用lumps system
- 计算机网络之无线局域网
- java unpark_LockSupport中的park与unpark原理
- ASE:空间分析、空间统计及空间计量经典论文系列推文概述
- 【见闻录系列】我所理解的“业务”
热门文章
- mysql truncate 释放空间_mysql truncate table未释放表空间磁盘空间
- Flume 尚硅谷2019
- R语言 ggplot2 多图排列 Part(1)
- WRF模式安装+详细运行教程
- 今天是1024程序员节,这是一段来自程序员最真实的内心自白,内容过于真实,我已泪崩。
- iOS 【消息处理 performSelector】
- IOS逆向--performSelector动态调用
- 利用python向word文档模板中写入内容
- 在Maptlotlib中使用Helvetica字体
- utf8 转 gbk/gb2312有些字乱码问题,例如 珺字