【有限状态机(Finite State Machine---FMS)】

本文探讨了有限状态机(FMS)的概念及其在处理复杂业务逻辑中的作用。状态机包括状态、转移、动作和事件四个要素,根据条件触发状态变化。文章介绍了状态表的构成,并通过视频转码过程举例说明。接着,讨论了一个简单的状态机实现,指出了其违反开闭原则的问题,并提出了改进方案,如采用状态模式、设置事件顶层接口和利用反射加注解封装策略。最后提到了自定义实现状态机时可以考虑的功能增强,如状态持久化、上下文传递和并发控制。
摘要由CSDN通过智能技术生成

其实我们在编程时实现相关业务逻辑时经常需要处理各种事件和状态切换,写各种switch/case 和if/else ,所以我们其实可能一直都在跟有限状态机打交道,只是可能没有意识到。在处理一些业务逻辑比较复杂的需求时,可以先看看是否适合用一个有限状态机来描述,如果可以把业务模型抽象成一个有限状态机,那么代码就会逻辑特别清晰,结构特别规整。


下面我们就来聊聊所谓的状态机,以及它如何在代码中实现。
1、状态机的要素    

状态(State):表示对象的某种形态,在当前形态下可能会拥有不同的行为和属性。
       转移(Transition):表示状态变更,并且必须满足确使转移发生的条件来执行。
       动作(Action):表示在给定时刻要进行的活动。
       事件(Event):事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态。

                                                                                                                                                                          图一

所有的状态转换都可以概括为:F(S, E) -> (A, S’),即如果当前状态为S,接收到一个事件E,则执行动作A,同时状态转换为下个状态S’。

分类

  • F(S) -> (A, S’) 型状态机:下一状态只由当前状态决定
  • F(S, E) -> (A, S’) 型状态机:下一状态不但与当前状态有关,还与当前输入值有关

2、状态表的要素

现态:是指当前所处的状态。
       条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
       动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
       次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

我们以视频转码过程(基于业务模型的猜想)用状态表表示整个过程,如下图所示。

现态|次态 文件上传 转码模板 视频转码 保存视频
文件上传

N/A

N/A

N/A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值