StateMachine
状态机概述 状态机是一种计算模型,用于描述系统在不同状态之间的转换逻辑。它由状态(States)、事件(Events)和转换(Transitions)组成。状态机在任一时刻只能处于一个特定状态,通过触发事件使其从一个状态转换到另一个状态。 核心概念 状态(State):系统可能处于的一种情况或模式。 事件(Event):触发状态转换的信号或动作。 转换(Transition):定义从一个状态到另一个状态的规则。 回调(Callback):状态转换时执行的逻辑。 应用场景 状态机在以下场景中特别有用: 游戏开发:管理游戏角色的不同状态(站立、行走、攻击、受伤等)。 UI 交互:控制界面元素在不同状态下的行为(正常、悬停、激活、禁用)。 工作流管理:追踪业务流程的不同阶段(创建、审核、发布)。 协议实现:网络协议的状态管理(连接中、已连接、断开连接)。 动画控制:管理动画序列和转换。 基本用法 // 定义状态和事件类型 type State = 'idle' | 'running' | 'paused' | 'stopped'; type Event = 'START' | 'PAUSE' | 'RESUME' | 'STOP'; // 创建状态机实例 const sm = new StateMachine<State, Event>('idle', [ t('idle', 'START', 'running'), t('running', 'PAUSE', 'paused'), t('paused', 'RESUME', 'running'), t('running', 'STOP', 'stopped'), ]); // 触发状态转换 await sm.dispatch('START'); // idle -> running console.log(sm.getState()); // 'running' 高级特性 全局事件(ANY_STATE) 使用 ANY_STATE 符号定义可从任意状态触发的转换: // RESET 事件可从任何状态回到 idle 状态 sm.addTransitions([ t(ANY_STATE, 'RESET', 'idle', resetCallback) ]); 状态查询和预测 // 检查当前状态是否可以接收特定事件 if (sm.can('PAUSE')) { // 可以执行暂停操作 } // 获取事件触发后的下一个状态 const nextState = sm.getNextState('STOP'); // 'stopped' // 检查当前是否为终止状态(没有可用的出站转换) if (sm.isFinal()) { // 到达终止状态 } 子状态机 子状态机是一种嵌套状态机机制,允许在一个主状态内部有自己的状态转换逻辑。这对于构建复杂的分层状态行为非常有用 ...