设计模式-状态模式和策略模式

news2024/10/5 23:18:00

1.状态模式

1.1定义

当一个对象的内在状态改变时允许根据当前状态作出不同的行为;

1.2 适用场景

(1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为.

(2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if-else或者switch-case), 且这些分支依赖于该对象的状态.

简言之就是需要用到状态机的地方都可以.

1.3 场景举例

游乐场的抓娃娃机, 提供了摇杆,但是在投币了和未投币的情况下,给出的响应是不一样的,尽管动作是相同的.

1.4状态模式的UML类图

  • Context, 调用主体,拥有和维护一个State实例;
  • State, 定义了状态接口,一系列行为的状态;
  • ConcreteStateA, 具体状态类,实现了State状态接口,从而达到不同状态下相同动作作出的不同行为.

2.策略模式

2.1定义

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.

2.2适用场景

  • 针对同一类问题的多种处理方式,仅仅是具体行为的有差别时;
  • 需要安全低封装多种同一类型的操作时;
  • 出现同一抽象类有多个子类,而有需要使用if-else或者switch-case来选择具体的子类时.

2.3场景举例

HAL的多家供应商方案, 约定的HAL接口行为是统一规范的,后边对应的具体实现行为是有差异的.

2.4策略模式的UML类图

说明:

  • Context, 调用行为主体,可类比Android 系统服务;
  • Stragety, 策略的抽象, 类比为HAL接口;
  • ConcretaStragetyA, 策略实例,有策略的方法的具体实现,可类比供应商的vendor实现方案.

3.相似异同点

二者在UML图中看起来有点相似,

状态模式下, Context调用主体记录的State是可以根据当前行为在ConcretaStateA和ConcreteStateB之间来回切换;

--- > 封装基于状态的行为,并将行为委托给当前状态类.

而在策略模式下,Context调用主题使用的是一种算法方案封装, 在运行期间只可持有特定的一种, 不可互相来回切换.

--- > 其重点在于可以互换的行为封装.

二者都属于行为型的设计模式.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【信息安全及等保】网络安全等级保护技术建议书(word原件)

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

3D打印随形水路在注塑生产中的显著优势

3D打印技术在模具制造中已崭露头角,特别是在注塑生产中,3D打印随形水路的应用正变得日益普遍。 首先,该技术能精准优化模具温度。3D打印随形水路随形冷却的设计让模具温度更加均匀,水路更贴近产品,有效提升产品品质和缩…

不知道自己的优势擅长和兴趣爱好,我该如何填报高考志愿选专业?

天生我才必有用,每个人都是独立的个体,拥有自己的优势和擅长,当然这个优势和擅长,不是和别人对比,而是和自己对比产生的。 如果说你不知道自己的优势擅长,不知道自己的兴趣和爱好,那只不过是你没…

李一桐遭遇蜈蚣惊魂

李一桐遭遇“蜈蚣惊魂”!刘宇宁展现真男人本色在娱乐圈的幕后,总有一些心跳加速的惊险。近日,李一桐在拍戏时遭遇了一场“蜈蚣惊魂”,让无数粉丝和网友为她捏了一把冷汗。而在这场惊险的遭遇中,刘宇宁展现出了真男人的…

[寄宿日记]韩漫日漫无删减完整版,免费在线观看漫画

[寄宿日记]韩漫日漫无删减完整版,免费在线观看漫画 不能多说,怕审-核不过,自己看图吧。 想要的在这里: https://blog.csdn.net/qq_42098517/article/details/140079915 https://gitee.com/zzwuweijun/manhua/blob/master/README…

【原理】机器学习中的最小二乘法公式推导过程

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是最小二乘法1.1. 什么是最小二乘法1.2. 最小二乘法的求解公式 二、最小二乘法求解公式的推导 最小二乘法是基本的线性求解问题之一,本文介绍最小二乘法的原理,和最小二法求解公式…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(上,非结构化剪枝)

文章目录 0. 前言1. 剪枝prune主要功能分类2. torch.nn.utils.prune中的方法介绍3. PyTorch实例3.1 BasePruningMethod3.2PruningContainer3.3 identity3.4random_unstructured3.5l1_unstructured 4. 总结 0. 前言 按照国际惯例,首先声明:本文只是我自己…

接口请求网关超时排查和引发的思考

问题描述 前端请求服务端接口,返回504 Gateway Timeout,请求接口为https://profile.noodles.com/user-mail-pub/api/user-mail/user-trash-mails?userId123456 原因分析 观察日志,发现网关链接超时,并且对应请求没有达到对应服…

四川省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展

6月21日,省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春,四川邮电职业技术学院党委副书记、校长冯远洪,四川邮电职业技术学院党委委员、副校长程德杰等出席…

【python】python知名品牌调查问卷数据分析可视化(源码+调查数据表)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

抓紧收藏!7 款令人惊艳的 AI 开源项目

🐼 关注我, 了解更多 AI 前沿资讯和玩法,AI 学习之旅上,我与您一同成长! 🎈 进入公众号,回复 AI, 可免费领取超多实用的 AI 资料 和内容丰富的 AI 知识库地址。 自从去年 AIGC 兴起以来,AI 开源…

gin 服务端无法使用sse流式nginx配置

我在本地使用 gin 可以流式的将大模型数据传递给前端。但是当我部署到服务器中时,会阻塞一段时间,然后显示一大段文本。 起初我怀疑是gin 没有及时将数据刷到管道中,但是经过测试,还是会阻塞。 c.Writer.(http.Flusher).Flush()最…

使用LabVIEW报告生成工具包时报错97

问题详情: 在运行使用Excel/Word调用节点的程序时,收到错误97:LabVIEW:(十六进制0x61)输入中传递了一个空引用句柄或先前已删除的引用句柄。 当运行报告生成工具包中的一个示例程序时,收到错误…

【python】python入门day2——数据类型与运算

python数据类型与运算 一、Python中变量的数据类型1、数据类型分类2、数值类型3、布尔类型4、字符串类型5、其他类型(了解) 二、Python数据类型转换1、使用Python实现超市的收银系统2、Python数据类型的转换方法3、总结 三、Python运算符1、算术运算符3、赋值运算符4、复合赋值…

计算机科学基础简单介绍(1—6)

计算机影响了我们生活的方方面面,在我们这个时代完全渗透了我们的生活。 最早是算盘、星盘、时钟、尺卡等古老的计算工具,后来出现了进步计算机,类似与汽车里程表的一种机械工具,但是他也是手工制品。经过历史的演变与发展&#x…

Prompting已死?DSPy:自动优化LLM流水线

在 LLM 应用中,如何优化一个 pipeline 的流程一直是一个比较头疼的问题。提示词作为一个预定义字符串,往往也没有很好地优化方向。本文中的 DSPy 框架或许能在实际应用中对效果优化起到一定帮助。 当前,在 LLM 的应用中,大家都在探…

LSTM时间序列基础学习

时间序列 时间序列可以是一维,二维,三维甚至更高维度的数据,在深度学习的世界中常见的是三维时间序列,这三个维度分别是(batch_size,time_step,input_dimensions)。 其中time_step是时间步,它…

GPU配置pytorch环境(links for torch)

一、创建一个新的虚拟环境 二、激活虚拟环境 三、打开或新建一个pycharm项目,把环境选成我们刚刚新建的虚拟环境 四、从links for torch网站下载与自己cuda版本和python版本对应的torch 五、在pycharm的终端pip install 安装torch 直到显示成功安装 六、验证pytorch…

六月,允许自己做自己,别人做别人

今天结束后,2024 就过去一半了。 年初的规划完成一半了吗?如果没有也没关系,做你自己继续前进。 家人来北京旅游,我累趴了 六月初,我搬家了,这次租了一整套房,是一个小俩居、还带一个小阁楼。…

新手练习项目 6:图书管理系统

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、项目描述二、项目结构三、项目步骤步骤1:定义Book类步骤2:实现主程序…