原文:https://www.cnblogs.com/barrywxx/p/12860573.html

一、为什么引入有限状态机?

  最近做一个项目,项目中很多实体(Entity),每个实体都有很多状态(State),各状态会经过不同事件(Event)触发后转换到另一个状态。这些事件包括但不限于:用户页面点击触发,生效时间或失效时间到达,其他依赖实体状态变更等。在状态变更后还会有一系列动作(Action)处理。一旦相互依赖实体或实体本身状态增多,状态转换变多,处理这些状态的业务代码也会分散在各处,代码处理很容易漏掉,维护成本很高。所以考虑引入有限状态机。

二、什么是有限状态机?

  有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向(方向表示从一个初态转换到次态)加权(权表示事件)边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起始状态”,表示FSM的初始状态。状态6称为“结束状态”

在启动一个FSM时,首先必须将FSM置于“起始状态”,然后触发一系列时间,最终,FSM会到达“结束状态”或者“消亡状态”。

图1:状态转换图

说明:

在通常的FSM模型中,一般还存在一个“接受状态”,并且FSM可以从“接受状态”转换到另一个状态,只有在识别最后一个字符后,才会根据最终状态来决定是否接受所输入的字符串。此外,也可以将“其实状态”也作为接受状态,因此空的输入序列也是可以接受的。

1. 状态机要素

状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
①现态:是指当前所处的状态。
②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
我们可以用状态表了表示整个过程,如下图所示。

图2:状态转换表

2. 有限状态机表示方法

①状态转换图,例如图1

②状态转换表,例如图2

 三、有限状态机实现方式

1. Java switch case 或者 Scala 模式匹配实现

2. Java枚举实现

Java枚举实现有限状态机

3. 设计模式:状态模式实现

4. 使用stateless4j实现

github地址:https://github.com/stateless4j/stateless4j

5. Spring Statemachine实现

github地址:https://github.com/spring-projects/spring-statemachine

6. Akka FSM 状态机实现

github地址:https://github.com/akka/akka

7. 通过squirrel-foundation实现

github地址:https://github.com/hekailiang/squirrel

自己做了些实例及封装:https://github.com/barrywang88/fsm

有限状态机FSM(Finite State Machine)及实现方式介绍(转)相关推荐

  1. 有限状态机FSM(finite state machine) 二

    有限状态机FSM(finite state machine) 二 延续上一篇继续有限状态机 上一篇中的状态切换判断是在每一个状态类的 OnExecute 方法中各种 if else 硬编码逻辑 当状态 ...

  2. 有限状态机FSM(finite state machine) 一

    有限状态机FSM(finite state machine) 一 有限状态机又称有限自动状态机,它拥有有限数量的状态,每个状态代表不同的意义,每个状态可以切换到 零-多 个状态.任意时刻状态机有且只能 ...

  3. 有限状态机 FSM——Finite State Machine

    有限状态机 1.状态机的结构 2.Mealy状态机和Moore状态机 3.用Verilog来描述可综合的状态机 实例 序列检测器 ADC采样控制电路 按键消抖 1.状态机的结构 其中F和G是两个有关状 ...

  4. 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...

    补充资料:ω-有限自动机 ω-有限自动机 ω-finite state automata 1094·.一youx一anz}dongJ-..有限自动机(.一rinite state automata)一 ...

  5. 【决策状态机FSM(finite state machine)梳理】

    背景:写论文需要,对需要有限状态机部分进行整理.论文内容是关于自动驾驶避撞决策. 参考Junior: The Stanford Entry in the Urban Challenge的有限状态机 1 ...

  6. FSM(Finite State Machine,有限状态机)设计

    有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机.Moore型状态机输出仅仅与现态有关和Mealy型状态机 ...

  7. 《计算机组成与CPU设计实验》5有限状态机的Verilog HDL描述(Finite State Machine,FSM)

    多数控制逻辑都可以用有限状态机描述 状态机 状态机是组合逻辑和时序逻辑的特殊组合 时序逻辑用于存储状态 组合逻辑用于产生次态和产生输出 状态的数量是有限的,故称为有限状态机(Finite State ...

  8. 证明与计算(7): 有限状态机(Finite State Machine)

    什么是有限状态机(Finite State Machine)? 什么是确定性有限状态机(deterministic finite automaton, DFA )? 什么是非确定性有限状态机(nond ...

  9. 【FPGA入门教程】(七)FSM(Finite State Machine,有限状态机)设计

    FPGA设计中,最重要的设计思想就是状态机的设计思想!状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态.输入.输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态 ...

最新文章

  1. 什么是目标检测中的旋转敏感度错误?
  2. 360企业安全完成Pre-B轮12.5亿融资
  3. PE学习(九)第九章:TLS 动态TLS与静态TLS
  4. 使用node中的express解决vue-cli加载不到dev-server.js的问题
  5. php+fpm+apache
  6. C++技巧:用kdevelop进行交叉编译的方法
  7. Java21天打卡Day6-switch
  8. python读取log文件_python之文件的读写(文本文档,log文件)
  9. UVA499 What‘s The Frequency, Kenneth?【文本】
  10. GBK与GB2312
  11. 数据库不存在 php报错,如何实现“当名字在数据库中不存在时,转到错误页面。”?...
  12. h5 invoke android,uniapp安卓版本11.0.0以上真机调试App: onLaunch have been invoked
  13. 计算机方向 会议级别
  14. VUE 的updated钩子函数被死循环一样无限调用
  15. MySQL--必知必会补充知识
  16. 无人机维修前景怎么样(4点分析无人机专业就业前景)
  17. 神兵利器 nth_element
  18. gprs模块c语言程序,“玩板”+ 共享单车控制板-GPRS模块SIM800C
  19. 鸿蒙相关的词语,鸿蒙的意思_鸿蒙是什么意思_鸿蒙的近义词_反义词_读音-沪江在线词典...
  20. 基于MFT文件上传和下载

热门文章

  1. 聊聊新窗口打开页面的opener问题
  2. 苹果再出新招,安卓手机或许连2000元价位都守不住了
  3. 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引...
  4. 国家税务总局河南省电子税务局中,交契税时,无法上传资料采集的附件的解决方法
  5. Cisco Nexus 之“ip redirect”
  6. 如何来选择1.5米拉绳位移编码器,小编来教大家
  7. 淘宝api接口手把手教你傻瓜式操作
  8. docker的使用问题
  9. SqlSever错误 证书链是由不受信任的颁发机构颁发的
  10. 如何修改dede文章页上一篇下一篇"没有了"