Spring Statemachine(SSM)就是在Spring框架上帮我们实现了状态机的框架。对于有限状态机,可分为以下2种类型
在以下的场景下可以考虑使用状态机
需要解决如异步回调等同步的问题
其实我们可能在无意中已经使用了状态机的,如以下的情况
状态机为驱动状态(一起的还有区域、转移和事件)的主实体。 层级状态机(Hierarchical State Machines)就是为了简化只能在一起存在的状态的设计的的概念。层级状态机允许对场景进行抽象,就像继承抽象类一样。例如一个嵌套的状态机,每一层都定义了转移条件。状态机会一层一层的往上检查守卫条件直到当前层的计算值为真。
状态就是状态机处于哪一状态下的模型,其中伪状态(Pseudo States)是一种具有特殊含义的状态,可以表达更高的抽象逻辑。而扩展状态(Extended State)为状态机保留的一组变量,用于减少需要的状态数。


守卫是一个动态计算的布尔表达式。守卫条件(Guard Conditions)通过对状态的变量和事件的参数来计算是否为真,来选择某个行为或者转移要不要被执行。
事件是用来驱动状态机的触发行为。我们可以通过如计时器等方法来触发状态机的行为,但我们可以通过事件来和状态机进行交互,也就是所谓的改变状态机状态的信号(signals)。
转移是由源状态到目标状态的一种关系。状态转移是通过触发器引起的由一种状态变成另外一种状态。

行为就是在转移时触发的动作。行为是用户实际粘合各状态的代码。当进/出状态,或进行转移时,状态机都可以执行行为。
区域是状态的组合或者是一个状态机,包括状态和转移。区域(也叫原始区域orthogonal regions )给人一种在状态上进行了或(or)的感觉。每个区域其实就是一个状态机,但是同时处理2个不同的状态机比较不方便,而且实际上这些状态机是一起工作。区域这个概念就是将多种类似的状态合成一种单一状态。