二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
在软件开发中,状态管理是一个常见的挑战。当对象的行为随着内部状态的变化而变化时,有效地管理对象的状态和相应的行为变得至关重要。在这方面,状态模式提供了一种优雅而灵活的解决方案。它允许对象在运行时根据内部状态的改变而改变其行为,同时保持代码的可扩展性和可维护性。
在上一篇文章,我们介绍了什么是状态模式,以及状态模式涉及的技术点,和案例演示代码。感兴趣的朋友请前往阅读:二十三种设计模式-解密状态模式:优雅地管理对象状态.
本文将继续探讨状态模式的高级用法技术,揭示其令人惊叹的潜力和应用场景,帮助你深刻的理解状态模式。
假设我们正在开发一个电子设备的控制系统,该设备具有不同的工作状态(例如,开机、关机、待机、运行等)。每个状态下,设备具有不同的行为和响应。
首先,我们定义一个状态接口DeviceState,它声明了设备状态的行为方法:
public interface DeviceState {void powerOn();void powerOff();void standby();void run();
}
然后,我们创建具体的状态类,例如PowerOnState、PowerOffState、StandbyState和RunningState,它们分别实现了DeviceState接口,并根据当前状态执行相应的行为。
接下来,我们实现上下文类DeviceContext,它持有当前的设备状态对象并提供方法来切换状态和调用行为:
public class DeviceContext {private DeviceState currentState;public DeviceContext() {this.currentState = new PowerOffState();}public void setState(DeviceState state) {this.currentState = state;}public void powerOn() {currentState.powerOn();}public void powerOff() {currentState.powerOff();}public void standby() {currentState.standby();}public void run() {currentState.run();}
}
最后,我们可以使用状态模式来控制设备的行为。例如:
DeviceContext device = new DeviceContext();
device.powerOn(); // 执行开机操作
device.standby(); // 将设备设置为待机状态
device.run(); // 执行运行操作
device.powerOff(); // 执行关机操作
通过状态模式,我们可以轻松地扩展设备的状态和行为,同时保持代码的可读性和可维护性。
状态模式是一种强大而灵活的设计模式,它为对象的状态管理提供了一种优雅的解决方案。通过将状态封装成独立的状态类,我们可以动态地切换对象的行为,并使代码更加清晰、可扩展和可维护。
在下一篇文章中,我们将继续探索更多关于设计模式和软件架构的知识,提升我们的编程技能,创造出更加优秀的软件作品!
好了,今天的分享到此结束。如果觉得我的博文帮到了您,您的点赞和关注是对我最大的支持。如遇到什么问题,可评论区留言。
相关文章:
二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
在软件开发中,状态管理是一个常见的挑战。当对象的行为随着内部状态的变化而变化时,有效地管理对象的状态和相应的行为变得至关重要。在这方面,状态模式提供了一种优雅而灵活的解决方案。它允许对象在运行时根据内部状态的改变而改变其行为&a…...
论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools
论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools 1. 文章简介2. 文章概括3 文章重点技术3.1 Toolformer3.2 APIs 4. 文章亮点5. 原文传送门 1. 文章简介 标题:Toolformer: Language Models Can Teach Themselves to Use Tools作者&#…...
stm32实现0.96oled图片显示,菜单功能
stm32实现0.96oled图片显示,菜单功能 功能展示简介代码介绍oled.coled.holedfont.h(字库文件)main函数 代码思路讲解 本期内容,我们将学习0.96寸oled的进阶使用,展示图片,实现菜单切换等功能,关…...
sqlite外键约束 保证数据一致性
1. 外键约束 在SQLite中,可以通过使用外键(Foreign Key)约束和CASCADE选项来实现通过外键删除相关信息。 CASCADE选项是指在主键表中删除记录时,相应的外键表中的相关记录也将被自动删除。 -- 创建主键表 CREATE TABLE Persons…...
Vue轻松入门,附带学习笔记和相关案例
目录 案例 一Vue基础 什么是Vue? 补充:mvvm框架 mvvm的组成 详解 Vue的使用方法 1.直接下载并引入 2.通过 CDN 使用 Vue 3.通过npm安装 4.使用Vue CLI创建项目 二插值表达式 什么是插值表达式? 插值表达式的缺点 解决方法 …...
【青蛙跳台阶问题 —— (三种算法)】
青蛙跳台阶问题 —— (三种算法) 一.题目介绍1.1.题目1.2.图示 二.解题思路三.题解及其相关算法3.1.递归分治法3.2.动态规划算法(Dynamic Programming)3.3.斐波那契数列法 四.注意细节 一.题目介绍 1.1.题目 一只青蛙一次可以跳上1级台阶&am…...
联想yoga AMD处理器 转接头无法电量外接显示器
第一次买AMD的处理器,当时就是为了yogaAMD这款的接口要比英特尔的接口多,没想到AMD处理器真的问题多。经常蓝屏不说,偶尔还点不亮外接显示器。遇到这种问题,不是什么驱动问题,可能你按照网上各种方法打开设备管理器→显…...
OSG粒子系统与阴影 - 阴影shadow(7)
OSG阴影 在虚拟现实仿真中,为了真实地模拟自然效果,阴影效果是不可缺少的,它对一个场景的真实性是非常重要的。在游戏或仿真中,一个高效的阴影往往能够提供非常强悍的视觉真实感。 osgShadow库 在OSG中专门定义了一个名字空间osg…...
vue3项目中使用富文本编辑器
前言 适配 Vue3 的富文本插件不多,我看了很多插件官网,也有很多写的非常棒的,有UI非常优雅让人耳目一新的,也有功能非常全面的。 如: Quill,简单易用,功能全面。editorjs,UI极其优…...
Java EE 进程线程
JavaEE 进程&线程 文章目录 JavaEE 进程&线程1. 进程1.1 概念1.2 进程管理1.3 PCB (Process Control Block) 2. 线程2.1 概念2.1 线程与进程的区别2.3 创建线程 1. 进程 1.1 概念 什么是进程? 进程是操作系统对一个正在执行的程序的一种抽象 我们可以打开…...
GPT写SQL的模版
表:profit_loss_sum_m_snapshot 计算字段:成本cost_whole求和,收入income_whole求和,收入求和-成本求和,成本目标cost_target求和,收入求和-成本目标求和 条件:日期statis_date在2023-11-01&…...
蓝桥杯官网练习题(平均)
问题描述 有一个长度为 n 的数组( n 是 10 的倍数),每个数 ai 都是区间 [0,9] 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第 i 个数的代价为 bi,他想更改若干个数的值使得这 10 种数出现的次数相等…...
【无标题】动手学深度学习_现代神经网络_未完
这里写目录标题 深度学习之前的网络 AlexNetAlexNet得到了竞赛冠军AlexNet架构Alex net更多细节数据增强 VGGNiN知识补充flop暂退法 drop_out 深度学习之前的网络 1、核方法 机器学习 SVM现在还是很广泛的使用,因为对调参的需求不那么大,对调参不太敏感…...
Java王者荣耀
GameFrame 图片 package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;import javax.soun…...
【理解ARM架构】操作寄存器实现UART | 段的概念 | IDE背后的命令
🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言:你只管努力,剩下的交给时间! 目录 🍠操作寄存器实现UART🍟UART原理🍟编程 🍠…...
python 左值查找 右值查找
左值查找 在一组数据中查找出 数字x 在这组数据中第一次出现的索引并输出,没有找到则输出-1查找方式:二分查找 数据前提:一组数据要有序一组数据: arr [2, 3, 3, 3, 5, 7, 9, 11, 13, 15, 17]测试: 示例1ÿ…...
机器学习之自监督学习(四)MoCo系列翻译与总结(二)
MoCo中相关工作的对比分析 去噪自动编码器(Denoising Autoencoder)是一种用于学习数据表示的神经网络模型。它的主要目标是通过去除输入数据中的噪声,学习到输入数据的有用表示,从而提高模型对干净数据的鲁棒性。下面是对去噪自动…...
元宇宙企业3d数字展厅轻松低本搭建更全面、多元、趣味化的展览
对所有企业来说,拥有一个3D线上展厅是互联网营销必不可少的部分,但是3D线上展厅定制周期长费用高,让很多企业公司望而却步,web3d开发公司制作的3D线上企业展厅制作平台备导览地图、语音解说、交互热点、全景漫游、自主行走、链接跳…...
华为OD机试真题-开源项目热榜-2023年OD统一考试(C卷)
题目描述: 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热…...
深入探索Maven:优雅构建Java项目的新方式(一)
Maven高级 1,分模块开发1.1 分模块开发设计1.2 分模块开发实现 2,依赖管理2.1 依赖传递与冲突问题2.2 可选依赖和排除依赖方案一:可选依赖方案二:排除依赖 3,聚合和继承3.1 聚合步骤1:创建一个空的maven项目步骤2:将项目的打包方式改为pom步骤…...
AI工厂令牌生产加速:统一服务与实时AI架构
使用统一服务和实时AI加速AI工厂中的令牌生产 在当今的AI工厂环境中,性能并非理论概念,而是经济、竞争和生存的关键。可用GPU时间下降1%,可能意味着每小时损失数百万令牌。几分钟的拥塞可能演变成数小时的恢复时间。机架级功率过载会导致功率…...
腾讯HY-MT1.5翻译模型应用案例:多语言文档翻译实战
腾讯HY-MT1.5翻译模型应用案例:多语言文档翻译实战 1. 模型概述与核心能力 1.1 模型架构与版本 腾讯开源的HY-MT1.5翻译模型包含两个版本: HY-MT1.5-1.8B:18亿参数版本,专为边缘计算和实时翻译场景优化HY-MT1.5-7B:…...
【ArUco GridBoard实战】从生成到高精度位姿估计全流程解析
1. ArUco GridBoard技术解析与应用场景 在工业视觉和机器人定位领域,精确的位姿估计是核心需求。ArUco GridBoard作为一种特殊的标记板,相比单个ArUco标记具有显著优势。我曾在多个工业项目中实测发现,使用5x7的GridBoard在3cm2cm的限定尺寸下…...
从哈希表到链表:一次搞懂链地址法解决冲突的C++实现细节(含插入与删除操作避坑)
从哈希表到链表:链地址法的C实战精解与避坑指南 在数据结构的世界里,哈希表因其接近O(1)的理想查找效率而备受青睐。但当我们真正动手实现时,特别是采用链地址法解决冲突时,那些看似简单的链表操作却暗藏玄机。本文将带您深入链地…...
不锈钢反应釜选型指南:模块化设计如何提升设备利用率
在化工、制药和精细化学品生产领域,不锈钢反应釜是工艺装备。然而,许多企业在采购和使用过程中面临着设备利用率低、温控精度不足、清洗困难等痛点。如何选择一台既能满足工艺需求,又能提高投资回报的反应釜?本文将从行业需求出发…...
专业的办公家具哪家技术强
在企业发展进程中,办公家具的优劣至关重要。专业办公家具不仅能提升办公环境舒适度,还能彰显企业形象与实力。然而,市场上办公家具品牌众多,究竟哪家技术强呢?今天,就为大家详细介绍佛山市豪亿办公家具&…...
Git从入门到精通:必备命令全指南
git 初始化与配置设置全局用户名和邮箱,用于标识提交者信息。 git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"初始化新仓库,将当前目录转为Git托管项目。 git init克隆远程仓库…...
从标注到训练:手把手教你用Labelme制作YOLOv8-Pose可用的关键点数据集
从标注到训练:手把手教你用Labelme制作YOLOv8-Pose可用的关键点数据集 在计算机视觉领域,关键点检测技术正逐渐成为研究热点。无论是人体姿态估计、面部表情识别还是工业质检中的零件定位,准确的关键点检测都是实现这些应用的基础。然而&…...
numpy+pandas核心操作全总结:详细代码注释(数组/Series/DataFrame完整指南)
📢 更多数据分析干货,关注公众号:船长Talk,每天分享 Python/SQL 实战技巧!两个重要的包:numpy、pandas,是数据分析师的必备基础。本文做全面总结,每段代码都有详细注释,建…...
保姆级教程:在Ubuntu 20.04上跑通ORB-SLAM3双目模式(EuRoC MH04数据集实测)
从零到一:Ubuntu 20.04下ORB-SLAM3双目模式实战全记录(EuRoC MH04数据集篇) 当第一次在实验室的显示器上看到ORB-SLAM3成功重建出MH04数据集的完整三维环境时,那种成就感至今难忘。作为视觉SLAM领域的标杆算法,ORB-SL…...
