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个之间:太少没必要,太多会很复杂
状态逻辑在多个地方重复:避免代码重复
状态机概念+实现方式
于 2026-04-08 14:40:46 首次发布
开发板推荐:天空星STM32F407VET6开发板
超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印
开发板推荐:天空星STM32F407VET6开发板
超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

498

被折叠的 条评论
为什么被折叠?



