学而时习之---状态模式

news2024/10/6 10:27:39

在软件系统中,有些对象也像水一样具有多种状态,
这些状态在某些情况下能够相互转换,
而且对象在不同的状态下具有不同的行为。
为了更好地对这些具有多种状态的对象进行设计。
使用一种被称为状态模式的设计模式。

状态模式用于解决系统中复杂的状态转换以及
不同状态下行为的封装的问题。

对象在不同状态下行为不相同时可以使用状态模式。
状态模式将一个对象的状态
从该对象中分离出来,封装到专门的状态类中,
使得对象状态可以灵活变化,
对于客户端而言,不关心对象状态转换以及
对象所处的当前状态。
无论对于何种状态的对象,客户端都可以一致处理。

允许一个对象在其内容状态改变时改变它的行为,
对象看起来似乎修改了它的类。

当你允许一个对象在其内部状态改变时改变其行为,这就意味着该对象具有某种形式的条件行为或状态依赖行为。换句话说,对象的行为会根据其当前的状态而变化。

举一个简单的例子:一个自动调温器。

假设你有一个简单的自动调温器对象,它有两个状态:“加热”和“冷却”。
当调温器的当前温度低于某个设定值时,它应该开始加热;而当当前温度高于某个设定值时,它应该开始冷却。
当调温器的状态(加热或冷却)改变时,它的行为(加热或冷却)也会相应地改变。
在面向对象编程中,你可以使用状态模式(State Pattern)来实现这种行为。
状态模式允许一个对象在其内部状态改变时改变其行为,同时保持其接口不变。
这样,对象的行为是根据它的状态动态地决定的。

核心点:

1.状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中。
2.允许一个对象在其内容状态改变时改变它的行为。抽象状态类,具体状态类。

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

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

相关文章

天翼云搭建CUDA开发环境综合教程

一、英伟达环境安装主要流程 1、下载安装对应系统版本nVidia驱动程序安装验证 2、CUDA开发套件安装验证 3、深度学习框架安装验证 4、容器化CUDA环境安装验证 5、制作天翼云主机私有镜像 6、分享镜像给其他用户,实现天翼云A10显卡英伟达驱动环境共享 二、详细…

01第一个Mybatis程序+引入Junit+引入日志文件logback

Mybatis MyBatis本质上就是对JDBC的封装,通过MyBatis完成CRUD。而对于JDBC,SQL语句写死在Java程序中,不灵活。改SQL的话就要改Java代码。违背开闭原则OCP。对于事务机制,MyBatis支持 或managed模式,JDBC模式中MyBatis…

element-ui Tree 树形控件 过滤保留子级并获取过滤后的数据 多选改单选

本示例基于vue2 element-ui element-ui 的官网demo是只保留到过滤值一级的,并不会保留其子级 目标 1、Tree 树形控件 保留过滤值的子级 2、在第一次过滤数据的基础上进行第二次过滤 3、Tree 树形控件 多选改为单选,且只有最末端子级可以选择 不足…

「解析」Windows 如何优雅使用 Terminal

所谓工欲善其事必先利其器,对于开发人员 Linux可能是首选,但是在家学习的时候,我还是更喜欢使用 Windows系统,首先是稳定,其次是习惯了。当然了,我还有一台专门安装 Linux系统的小主机用于学习Linux使用&am…

八、QLayout 用户基本资料修改(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法,任何标点符号都可以作为日期部分之间的间隔符,如“24-01-03”、“24.01.03”…

第二百四十五

我们在上一章回中介绍了"修改页面导航中遇到的问题"沉浸式状态样相关的内容,本章回中将介绍如何修改Avatar的大小.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在正常使用CirCleAvatar组件时可以通过该组件的radius属性来修改它的…

Git 对项目更新的时候提示错误 repository not owned by current user

遇到 Git 提示的错误信息为:repository not owned by current user 上图显示的是错误的信息。 问题和解决 出现上面错误信息的原因是当前文件夹的权限和 Git 的执行权限不一直导致的。 我们的问题是我们希望在网盘上使用 Git 更新克隆后的代码,但登录…

KeyError: ‘model_state_dict‘

问题 加载模型权重文件时获取model_state_dict键失败 解决 单步调试发现保存模型权重时正确保存了该键值对,再次调试时发现莫名奇妙又没错了 首先确认保存模型时的状态字典键名:确保在保存模型权重时,正确地使用了 model.state_dict() 方法…

机器学习原理到Python代码实现之LinearRegression

Linear Regression 线性回归模型 该文章作为机器学习的第一篇文章,主要介绍线性回归模型的原理和实现方法。 更多相关工作请参考:Github 算法介绍 线性回归模型是一种常见的机器学习模型,用于预测一个连续的目标变量(也称为响应变…

el-autocomplete远程搜索使用及el-upload上传多个文件流给后端,详情接口返回的是文件地址,前端将文件地址转成文件流,回传文件流给后端

最近遇到一个项目,里面有2个需求我觉得挺常见的,第一个需求是一个表单里,当用户在输入名称后,前端调接口发请求获取到关联名称的企业名称,并展示,然后当用户选中企业后,前端调接口获取选中企业的具体信息,并填充到表单里;第二个需求是,表单里有个上传图片的功能,前端…

【elfboard linux开发板】8. watchdog 和 mpu

1. 用文件IO的方式使用watchdog a. ioctl 命令说明 需要的头文件#include <sys/ioctl.h> 格式&#xff1a;int ioctl(int fd, unsigned long request, …) fd 必须被打开 第二个参数是一个依赖设备的请求代码 第三个参数是一个无类型的内存指针 返回值&#xff1a;成功为…

Python 资源大全中文版

文末有链接 资源列表 环境管理 管理 Python 版本和环境的工具 p&#xff1a;非常简单的交互式 Python 版本管理工具。 pyenv&#xff1a;简单的 Python 版本管理工具。 Vex&#xff1a;可以在虚拟环境中执行命令。 virtualenv&#xff1a;创建独立 Python 环境的工具。 …

【React系列】react-router

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识react-router 1.2. 前端路由原理 前端路由是如何做到URL和内容进行映射呢&#xff1f;监听URL的改变。 UR…

Halcon粘连木材图像的目标分割计数

Halcon粘连木材图像的目标分割计数 文章目录 Halcon粘连木材图像的目标分割计数1. 提取面积较小区域2. 分割较大区域3. 区域合并与计数 本文以一个实际场景图片为例&#xff0c;介绍阈值处理与形态学计算的应用。案例图像如图所示,图&#xff08;a&#xff09;为输入的原始图像…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -小程序端TabBar搭建

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

突破技术边界:R与jsonlite库探秘www.snapchat.com的数据之旅

概述 Snapchat是一款流行的社交媒体应用&#xff0c;它允许用户发送和接收带有滤镜和贴纸的照片和视频&#xff0c;以及创建和观看故事和发现内容。Snapchat的数据是非常有价值的&#xff0c;因为它可以反映用户的行为、偏好和趋势。然而&#xff0c;Snapchat的数据并不容易获…

从0开始python学习-40.通过正则表达式/json进行接口关联

目录 1. 正则表达式&#xff1a;使用re库&#xff08;需安装-pip install re&#xff09;&#xff0c;只能提取字符串的数据。 1.1 re.seach&#xff1a;提取一个值&#xff0c;得到的是一个对象&#xff0c;通过下标group(1)取值&#xff0c;如果没有匹配到值则返回None 1.…

优化企业运营,深入探索SAP库存管理解决方案

SAP库存管理是SAP提供的一款领先的企业库存管理解决方案。它致力于帮助企业实现对库存的全面掌控&#xff0c;优化供应链管理&#xff0c;降低库存成本&#xff0c;提高客户满意度。这个功能强大的系统为企业提供了丰富的仓储管理功能&#xff0c;如库存盘点、物料追踪、供应商…

WPF DatePicker与Calendar的使用和样式修改

什么是DatePicker&#xff0c;Calendar Calendar&#xff1a;日历&#xff08;显示年月日视图控件&#xff09;DatePicker&#xff1a;日期选择器&#xff08;是一个更小的控件&#xff0c;点击控件时才会弹出一个日历&#xff09; Calendar使用 常用属性 DisplayMode&#…