设计模式——状态模式介绍
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。
状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。
下面是一个例子来说明状态模式的应用:
// 抽象状态类
interface State {void handle(Context context);
}// 具体状态类1
class ConcreteState1 implements State {public void handle(Context context) {System.out.println("当前状态是状态1");context.setState(new ConcreteState2()); // 设置下一个状态}
}// 具体状态类2
class ConcreteState2 implements State {public void handle(Context context) {System.out.println("当前状态是状态2");context.setState(new ConcreteState1()); // 设置下一个状态}
}// 上下文类
class Context {private State state;public Context(State state) {this.state = state;}public void setState(State state) {this.state = state;}public void request() {state.handle(this);}
}// 客户端代码
public class Main {public static void main(String[] args) {// 创建初始状态State initialState = new ConcreteState1();Context context = new Context(initialState);// 发起请求context.request(); // 打印"当前状态是状态1"context.request(); // 打印"当前状态是状态2"context.request(); // 打印"当前状态是状态1"}
}
在上述示例中,状态模式被用于管理上下文(Context)对象的不同状态。每个具体状态(Concrete State)都实现了状态(State)接口,并根据需要进行状态转换。上下文类(Context)通过委托给当前状态对象来处理请求,并可以在运行时更改状态。
通过状态模式,客户端代码可以与上下文对象进行交互,而不需要直接处理复杂的状态逻辑。这对于需要根据状态改变行为的场景非常有用,例如自动售货机中的不同状态(待机、售货、缺货等)的管理。
相关文章:
设计模式——状态模式介绍
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。 状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。 下面是一个例…...
Java 多线程之 CAS(Compare and Set),实现无锁优化,自旋锁/乐观锁
文章目录 一、概述二、JDK 的 Unsafe 类三、ABA 问题 一、概述 CAS(Compare and Swap)是一种并发编程中的原子操作(synchronized 也使用了 CAS),用于实现多线程环境下的同步和数据共享。CAS提供了一种高效的并发控制机…...
python之pyqt专栏1-环境搭建
#python pyqt# python:3.11.6 pycharm:PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载:Python Releases for Windows | Python.org pycharm社区版安装 官网地址:Download PyCharm: Python IDE for Professional…...
Spring Cloud LoadBalancer 简单介绍与实战
前言 本文为SpringCloud的学习笔记,如有错误,希望各位高手能指出,主要介绍SpringCloudLoadBalancer的基本概念和实战 文章目录 前言什么是LoadBalancer负载均衡分类服务端负载均衡客户端负载均衡服务端负载均衡和客户端负载均衡的优缺点 常见…...
私域流量解决方案分享
...
Scala---WordCount
一、创建Maven项目导入pom.xml文件 安装Maven仓库管理工具,版本要求是3.2版本以上。新建Maven项目,配置pom.xml。导入必要的包。 二、Spark-Scala版本的WordCount 1.val conf new SparkConf() 2.conf.setMaster("local") 3.conf.setAppNam…...
GTC2023全球流量大会蓄势待发,菊风在7B57展位等你!
第六届 GTC 全球流量大会(以下简称 GTC2023)将于12月5日- 6日,在深圳福田会展中心7&8号馆举办。 据悉,本届大会将是历届以来规模最大、参与人数最多、跨境出海资源最丰富的一次行业盛会。7、8 号馆共 15000 平方米&am…...
喜讯!云起无垠成为国家信息安全漏洞库(CNNVD)技术支撑单位
近日,云起无垠凭借其在漏洞挖掘、漏洞检测以及漏洞修复等领域的卓越表现,荣获“国家信息安全漏洞库(CNNVD)技术支撑单位等级证书(三级)”,正式成为CNNVD技术支撑单位。 中国国家信息安全漏洞库&…...
cc linux用root用户执行chmod 777 -R ./提示 Operation not permitted怎么办?
如果你作为 root 用户执行 chmod 777 -R ./ 命令时收到 “Operation not permitted” 错误,可能有几个原因: 不可更改 (Immutable) 文件属性: 文件可能被设置为不可更改。即使是 root 用户也不能修改这些文件的权限。使用 lsattr 命令查看文件…...
scrapy框架流程
1、Scrapy从Spider子类中提取start_url,然后构造为request请求对象 2、将request请求对象传递给爬虫中间件 3、将request请求对象传递给Scrapy引擎(核心代码) 4、将request请求对象传递给调度器(它负责对多个request安排,好比交…...
802.11 帧的Reason Code 位和Status Code 位
Reason Code 位 当对方不适合加入网络时,工作站会送出 Disassociation(解除连接)或 Deauthentication(解除身份认证)帧作为应答。这些帧当中包含一个长度 16bit 的 Reason Code(原因代码)位&am…...
骨传导能保护听力吗?为什么说骨传导耳机可以保护听力?
由于骨传导耳机的特殊传声方式,是可以保护听力的。 首先了解下骨传导耳机的传声方式是什么: 骨传导耳机是通过骨骼震动传导技术,将声音传至颅骨,然后通过颅骨传导到内耳,直接刺激听觉神经,使人感知到声音…...
【iOS】实现评论区展开效果
文章目录 前言实现行高自适应实现评论展开效果解决cell中的buttom的复用问题 前言 在知乎日报的评论区中,用到了Masonry行高自适应来实现评论的展开,这里设计许多控件的约束问题,当时困扰了笔者许久,特此撰写博客记录 实现行高自…...
POE交换机——电源解决方案-升压控制器\降压控制器\中高压降压转换器
PoE是一种有线以太网供电技术,使用于数据传输的网线同时具备直流供电的能力,PoE供电具有可靠、连接简捷、标准统一的优势。越来越多的工业物联网设备开始采用PoE供电, 如IP电话、网络视频监控以及无线以太网设备等。 PoE交换机是一种用于提供…...
[C/C++]数据结构 循环队列
前言: 队列是一种具有先进先出特性的结构,但是当数据出队列以后,前面的空间就无法再次利用了,循环队列就可以解决这个问题 一:概念及结构: 1.循环队列概念 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队…...
Cache学习(2):Cache结构 命中与缺失 多级Cache结构 直接映射缓存
1 Cache名词解释 命中(hit): CPU要访问的数据在Cache中有缓存缺失(miss): CPU要访问的数据在Cache中没有缓存Cache Size:Cache的大小,代表Cache可以缓存最大数据的大小Cache Line&a…...
vue前端前端页面权限验证方式
在Vue应用中使用Vuex(Vue的状态管理库)来存储用户组(user group)和角色(roles)信息是一种合理的做法,特别是在涉及到权限管理和用户身份的情况下。Vuex提供了一个集中式的状态管理方案ÿ…...
jenkins springCloud项目优雅下线
文章目录 场景解决下线请求效果如图贴一个可用的部署脚本 场景 在 Spring Cloud 项目的微服务实例关闭时,需要首先从注册中心设置为下线,避免该服务的消费者继续请求该服务实例,导致请求失败如果我们在服务实例从注册中心取消注册后ÿ…...
indexOf
可以通過String的indexOf判斷是否包括某個字符。 SpringBootTest Slf4j class BaseApplicationTests {Testvoid contextLoads() {log.info("01".indexOf(".")"");log.info("0.1".indexOf(".")"");log.info("…...
STM32分区跳转问题
项目场景: 在OTA中,FLASH通常被划分为以下几种类型 bootloaderiapappbootloaderappapp保存区bootloaderapp1app2 不同的分区方式有不同的有点,但是共同点都是需要执行分区跳转 问题1描述 但在分区跳转过程中遇到过使用不同的编译器不能跳转…...
Spring Security 5.x 下WebSocket连接被拦?别慌,一个配置项就搞定
Spring Security 5.x 中WebSocket连接拦截问题的深度解析与实战解决方案 最近在技术社区看到不少开发者反馈同一个问题:明明在Spring Security的HttpSecurity配置中已经为WebSocket路径设置了permitAll(),为什么连接还是被拦截?这确实是个容易…...
从‘深分页’到‘游标分页’:一次订单导出性能提升500%的优化实录(附EasyExcel配置)
百万级订单导出性能跃迁:从深分页陷阱到游标分页实战 当系统需要导出百万级订单数据时,很多开发者会遭遇一个典型困境:明明已经采用分批查询策略,导出速度却依然缓慢如蜗牛。这背后往往隐藏着数据库深分页(Deep Pagina…...
【超全教程】2026年Hermes Agent/OpenClaw阿里云3分钟轻松集成流程
【超全教程】2026年Hermes Agent/OpenClaw阿里云3分钟轻松集成流程。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办公与轻量团队协作…...
从4G到5G,手机Modem架构到底升级了啥?给开发者与测试工程师的实用指南
从4G到5G:手机Modem架构的深层变革与技术实践指南 当你在5G手机上滑动屏幕时,是否思考过这个看似简单的动作背后,隐藏着从2G到5G跨越二十年的无线通信技术堆叠?现代智能手机的Modem(调制解调器)已演变成一个…...
2026 论文写作软件红黑榜:AI 论文写作软件怎么选?用数据说话!
2026 年论文写作工具红榜榜单正式发布,掌桥科研 AI 写作、ThouPen、豆包因深度贴合国内学术标准,位列红榜前列。黑榜则提醒大家远离劣质免费工具、无真实文献引用平台以及过度主打全文生成的 AI 软件。挑选时可参考三大核心维度:需求契合度、…...
SVD降维技术:原理、实现与实战应用
1. 降维的本质与SVD的数学之美当你的数据集列数突破1000维时,每个数据点就像被困在千米高维空间里的蚂蚁——你明明知道这些维度里藏着规律,却根本看不清它们的全貌。这就是为什么我们需要降维技术,而奇异值分解(SVD)正…...
家用设备部署轻量级对话AI:从模型选择到实践优化
1. 项目概述:在家打造专属对话AI三年前我第一次接触大语言模型时,需要租用昂贵的云服务器才能运行基础版本。如今随着模型优化和硬件发展,在消费级设备上部署轻量级对话AI已成为可能。这个项目将带你在家用显卡或甚至纯CPU环境下,…...
<Day-01>从磁场合成到SVPWM:FOC控制核心原理拆解
1. 无刷电机磁场控制的底层逻辑 我第一次接触无刷电机控制时,最困惑的就是"磁场合成"这个概念。想象一下,我们手里拿着三根导线,通过控制电流就能让电机转子乖乖听话——这背后其实是电磁场在起作用。无刷电机的定子绕组就像三个小…...
保姆级教程:在Ubuntu系统的AIxBoard上,用CODESYS V3.5 SP17配置软PLC,并打通Python(OpenVINO/YOLOv5)的共享内存通信
边缘智能控制实战:基于AIxBoard与CODESYS的软PLC-Python协同开发指南 当工业控制遇上人工智能,传统PLC的封闭性与现代AI算法的开放性如何实现无缝对接?本文将手把手带您完成从零搭建一个支持机器视觉的智能控制系统。不同于简单的理论概述&am…...
C++ MCP网关延迟突增23ms?别再查业务逻辑了——从RDTSC时间戳校准到Intel RAPL功耗反推,定位硬件级性能陷阱
更多请点击: https://intelliparadigm.com 第一章:C 编写高吞吐量 MCP 网关 性能调优指南 MCP(Model Control Protocol)网关作为 AI 模型服务的统一接入层,其吞吐能力直接决定多模型协同调度的实时性与稳定性。在 C 实…...
