状态机是用来管理一个业务流程中不同状态的设计模式
比如开门拿外卖可以分为几个状态:
1.等待门铃
2.确认敲门人是外卖员
3.开门
4.拿外卖
5.关门
而状态机就是用来分别管理各个状态之间的逻辑的
每个状态都只需要负责自己状态内的逻辑,不需要考虑别的状态约束
值得注意的是,状态机是根据状态值来进入不同的状态,而不主动改变状态
比如在开门状态时就不需要判断门是否在之前就已经被打开
状态机是由外部驱动(Timmer计时器,或PLC扫描周期)不断循环的,当发生状态切换时,状态机并不会马上跳转
而是在下一个循环中,根据状态值(一般是switch-case)进入切换到的新状态
比如在等待门铃状态时,状态机等待门铃事件或状态机轮询门铃状态,门铃触发后,关闭门铃,准备询问敲门人,然后在逻辑的结尾将状态机状态切换为 2.确认敲门人是外卖员 状态,至此这一轮循环结束
在第二轮循环中,状态机根据刚刚被切换的状态值——2.确认敲门人是外卖员 进入该状态,
此时有一个条件判断,a.门外是我的外卖员;b.门外敲门的是别人
如果是 a :正合我意,切换状态准备开门
如果是 b :不是我的外卖我不开门,继续切换到等待门铃状态等待外卖
现在假设是 a ,那就切换状态为 3.开门
至此又进入下一轮循环
在第三轮循环中,状态机根据状态值——3.开门 进入开门状态 执行开门的逻辑语句,解锁反锁,扭门把手,开门 逻辑结束时切换到 4.拿外卖状态 至此该循环结束
在第四轮循环中,状态机根据状态值——4.拿外卖 进入该状态 报手机尾号,拿外卖,确认没坏,准备关门 切换到5.关门状态 至此循环结束
下一循环中,状态机根据状态值——5.关门 进入关门状态 关门,反锁,打开门铃开关,切换到1.等待状态 在下一循环中流程又回到了初始状态


本文作者:猫猫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!