1概述
其实,状态模式主要解决的就是当控制一个对象状态转换的条件表达式过于复杂的情况,它把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。
作用:大体上编程都是对现实的抽象,有效状态机也不例外,当逻辑里面有大量判断需要转换状态时,有限状态机就有用处了,本质上其是用查表法来把处理逻辑独立到表中,从而可以用通用的代码去处理任意复杂的状态转换,(留坑放例子)。
Bug:处于下斩状态时可以跳跃
2状态转换图
2.1状态
状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
①现态:是指当前所处的状态。
②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
2.2转换示意图
FSM的难点不在编程,在于理清楚状态转移图!
2.3注意点
1,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。
2,FSM_FUN(stateA,stateB) 就表示,从状态stateA跳转到stateB时要执行的所有元动作的有序集
3,状态机中的一个对象的只有一个状态
3Spring StateMachine
3.1定义状态和事件枚举
3.2为状态机定义使用的所有状态以及初始状态
3.3为状态机定义状态的迁移动作
注意点: 1,在同一个线程下,只会出现状态机中的一个状态
2, 如果输入在当前状态没有定义转换,输入就被忽视.
3,输入的状态装换操作,其初态不匹配当前状态,输入也会忽视.
3.3为状态机指定监听处理器
可以只单独配置source或者target
3.5状态机的调用
输出结果:
///////////////////
连接事件, 未连接 -> 已连接
///////////////////
参考链接
https://blog.csdn.net/poem_qianmo/article/details/52824776
https://www.cnblogs.com/cnblog-long/p/7245522.html
网友评论