1. 状态机基础概念解析
状态机(Finite State Machine,简称FSM)是计算机科学中一个既经典又实用的概念。我第一次接触状态机是在大学数字电路课上,当时觉得这不过是个理论模型,直到工作后参与LuckiBit支付系统开发,才真正体会到它的威力。
状态机本质上描述了一个系统如何在不同状态间流转。想象一下自动售货机:它有空闲、选择商品、付款、出货等不同状态。当用户投入硬币(事件),机器就会从"空闲"状态转移到"付款"状态。这种明确的状态流转规则,正是状态机要解决的问题。
状态机有三个核心要素:
- 状态(State):系统在特定时刻所处的状况。比如订单系统中的"待支付"、"已发货"等
- 事件(Event):触发状态转移的条件或动作。如"用户付款"、"库存检查通过"
- 转移(Transition):状态因事件而发生的变化规则。定义了"从哪个状态"+"什么事件"→"到哪个状态"
在LuckiBit的实际开发中,我们使用状态机处理支付流程:
java复制// 简化的支付状态机示例
enum PaymentState {
INITIAL,
PROCESSING,
SUCCESS,
FAILED
}
enum PaymentEvent {
PAYMENT_REQUEST,
PAYMENT_COMPLETE,
PAYMENT_FAIL
}
注意:设计状态机时,一定要确保每个状态都是明确的、互斥的。我曾见过有开发者把"处理中"和"等待回调"设为两个状态,结果导致状态混乱。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 状态机的类型与实现方式
2.1 状态机的两种基本类型
状态机主要分为两类:
-
Moore型状态机:输出只与当前状态有关
- 适合输出固定的场景,如交通信号灯
- 实现简单但灵活性较低
-
Mealy型状态机:输出取决于当前状态和输入事件
- LuckiBit的订单系统采用这种类型
- 能实现更复杂的业务逻辑
类型对比表:
| 特性 | Moore型 | Mealy型 |
|---|---|---|
| 输出决定因素 | 仅当前状态 | 状态+输入事件 |
| 复杂度 | 较低 | 较高 |
| 适用场景 | 简单流程控制 | 复杂业务逻辑 |
2.2 状态机的实现模式
在实际编码中,状态机有几种常见实现方式:
1. 条件分支式(新手常见)
python复制if state == "A":
