状态机编程

状态机编程

August 9, 2017
Java

状态机是一种程序设计模式。

这种设计模式适合在一些场景下使用,比如一个任务可能拆开成不同的部分去做,这些动作可能是异步的也可能是同步的,这个时候我们用一个for循环来搞就会很麻烦,最重要的是很丑。

我们希望能做成事件驱动的程序,这个时候一个很好的设计模式就是利用状态机的思路来写。

问题特征 #

一个处理流程中一些部分都可以是异步的,并且每个步骤都有可能失败。

其实最主要的就是这个问题可能失败,所以我们希望在我们将失败的原因搞定以后,再次启动这个程序的时候可以继续从上一次失败的地方继续执行而不是将原来的操作进行回退,然后再重新跑一遍。

状态机编程 #

使用状态机的设计模式可以让程序直接跳到当前状态所处的位置,继续执行。

其实是很简单的,我们给我们的每个步骤都设计几个状态,最常见的状态就是startsuccessfaild等。

并且在一个状态结束以后会去回调一个函数去更改相关的事件的状态。将事件的状态保存在一个诸如数据库或是什么东西上。

这种设计思路可以应用在很多场景下,比如一个用户的行为会触发一个后台流程,后台要在做完这个流程以后再把结果返回给用户。如果等待程序返回就会浪费很多时间,很可能中间的某个环节失败了,这样的话又要重新来搞一次。

如果用状态机的设计模式,行为触发状态机的一个点,然后由状态机做后续的出发,等到收集到所有事件都成功以后再给用户返回个结果就可以了。同时用户也可以将这个请求做成异步的,不必等待程序的返回值。

对于状态机编程的事件,有一个最重要的一个就是事件的触发是由于状态的改变来触发的,所以只要我们去更改一个事件的状态我们的这个动作就算是做完了,至于触发的动作什么时候做完我们不管,会有一个状态标识的方式的。

思路就是这样的,具体的实现代码以后写其他的东西的时候再贴吧。