状态机概念+实现方式

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

1.什么是状态
先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。
2.什么是状态机?
不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。我们通常所说的状态机是有限状态机,也就是被描述的事物状态的数量是有限的,例如自动门的状态就是两个 open 和 closed。
3.4个概念
状态:一个状态机至少要包含两个状态。例如上面自动门的例子,有 open 和 closed 两个状态。
事件:事件就是执行某个操作的触发条件或者口令。对于自动门,“按下开门按钮”就是一个事件。
动作:事件发生以后要执行动作。例如事件是“按开门按钮”,动作是“开门”。编程的时候,一个 Action一般就对应一个函数。
转换:也就是从一个状态变化为另一个状态。例如“开门过程”就是一个变换。
4.状态机的三种实现方式
方式一:状态模式(适合复杂业务逻辑)
当每个状态都有复杂的行为时,定义一个接口类每个状态是一个接口方法,让每个状态成为一个独立的类。定义状态接口–>定义具体状态类
定义接口在这里插入图片描述
在这里插入图片描述
方式二:枚举+Map的轻量状态实现(适合简单场景)
这种写法相比经典状态模式,代码量更少,适合状态数不多、且状态逻辑相对简单的场景。
(1)用枚举类定义所有状态
(2)每个状态实现自己的行为逻辑
(3)通过 Map 注册状态与处理逻辑的映射关系
(4)直接通过当前状态对象来执行对应方法,避免 if-else
在这里插入图片描述
方式三:使用框架:Spring StateMachine
Spring StateMachine 是 Spring 官方提供的状态机框架,支持可配置状态流转、事件驱动、监听器回调等功能,特别适合业务流程复杂、状态多变的场景。
步骤1:定义状态和事件
步骤2:配置状态机
步骤3:使用状态机
在这里插入图片描述
5.什么时候应该使用状态机?
对象有明确的状态:如订单、任务、审批单
状态转换有严格规则:已支付才能发货,不能跳过中间状态
状态数量在3-20个之间:太少没必要,太多会很复杂
状态逻辑在多个地方重复:避免代码重复

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值