用查表法来实现有限状态机的状态转移id <!-- more --> ## 关键词 | 分类 | 关键词 | 说明 | | ---- | ------------------- | ---------- | | 核心角色 | State | 状态接口/抽象类 | | | ConcreteState | 具体状态实现 | | | Context | 上下文,维护当前状态 | | | StateMachine | 状态机,管理状态转换 | | | Transition | 状态转换 | | 状态管理 | InitialState | 初始状态 | | | FinalState | 终止状态 | | | CurrentState | 当前状态 | | | PreviousState | 前一个状态 | | | NextState | 下一个状态 | | 转换控制 | ChangeState | 改变状态的方法 | | | TransitionTo | 转换到指定状态 | | | AllowTransition | 允许的状态转换 | | | Guard | 状态转换守卫条件 | | | Trigger | 触发状态转换的事件 | | 状态类型 | Simple State | 简单状态 | | | Composite State | 组合状态 | | | Hierarchical State | 层次状态 | | | Parallel State | 并行状态 | | | History State | 历史状态 | | 实现方式 | Enum Based | 基于枚举实现 | | | Event Driven | 事件驱动实现 | | | Table Driven | 表驱动实现 | | | Rule Engine | 规则引擎实现 | | | FSM | 有限状态机 | | 状态行为 | Entry Action | 进入状态动作 | | | Exit Action | 退出状态动作 | | | Do Action | 状态内动作 | | | Transition Action | 转换时动作 | | | Event Handler | 事件处理器 | | 持久化 | State Storage | 状态存储 | | | State Recovery | 状态恢复 | | | State Snapshot | 状态快照 | | | State History | 状态历史记录 | | | State Serialization | 状态序列化 | | 调试特性 | State Logging | 状态日志 | | | State Visualization | 状态可视化 | | | State Monitoring | 状态监控 | | | Debugging Tools | 调试工具支持 | | 高级特性 | State Machine DSL | 状态机领域语言 | | | Visual Editor | 可视化编辑器 | | | Code Generation | 代码生成 | | | Hot Reload | 热重载支持 | ## 场景 ![](https://cdn-a.markji.com/files/65950680084f1761475c01ca_hd.png?e=1713366779981&token=xX63b9jqTlDOcGmctt5K9254rV0LG8hS9BmDeFBy:w32Wc9CTntCqqkUtwdHqDUX-wns=) ## 实现 **用查表法来实现有限状态机的状态转移** 什么是状态机? - 图论中的概念,本质是一张图结构 为啥叫有限状态机? - 无限状态机只是一个理论概念 - 有限状态机由 3 个部分组成:状态、事件、动作。其中,事件也称为转移条件。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。 什么是查表法? - 通过一张表把状态转移图落实到表上,表在 Java 中用 Map<K, Map>的数据结构就可以实现 | 当前状态 | 事件 | 目标状态 | | --------- | ---- | -------- | | 离线,修改中 | 上线操作 | 离线,上线审核中 | | 离线,修改中 | 修改 | 离线,修改中 | | 离线,上线审核中 | 审核通过 | 在线,审核通过 | | 离线,上线审核中 | 审核驳回 | 离线,审核驳回 | | 离线,审核驳回 | 修改 | 离线,修改中 | | 离线,审核驳回 | 上线操作 | 离线,上线审核中 | | 离线,审核通过 | 修改 | 离线,修改中 | | 离线,审核通过 | 上线操作 | 离线,上线审核中 | | 在线,审核通过 | 下线操作 | 在线,下线审核中 | | 在线,下线审核中 | 审核通过 | 离线,审核通过 | | 在线,下线审核中 | 审核驳回 | 在线,审核驳回 | | 在线,审核驳回 | 修改 | 在线,修改中 | | 在线,审核驳回 | 下线 | 在线,下线审核中 | | 在线,修改中 | 修改 | 在线,修改中 | | 在线,修改中 | 上线申请 | 在线,上线审核中 | | 在线,上线审核中 | 审核通过 | 在线,审核通过 | | 在线,上线审核中 | 审核驳回 | 在线,审核驳回 | | 在线,审核通过 | 修改操作 | 在线,修改中 | | 在线,修改中 | 下线 | 在线,下线审核中 | | 在线,上线审核通过 | 下线 | 在线,下线审核中 | ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F05%2F09%2F22-19-26-fe56f9ffe194312560ac15d7026a896f-20240509221925-1d7271.png) ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F05%2F09%2F22-19-45-130ea5d7a71099a8f8ae1130f256fa79-20240509221943-f6aa5c.png) ![](https://cdn-a.markji.com/files/65950679084f1761475c0144_hd.png?e=1713366779981&token=xX63b9jqTlDOcGmctt5K9254rV0LG8hS9BmDeFBy:vXTS_VHDsWZR5c4n5lzdamyQswM=)