【Spring Boot】Spring Statemachine-状态机

1,128 阅读1分钟

状态机,通常指的是有限状态机(Finite State Machine,简称 FSM),起源于 1943年 Warren McCulloch 和 Walter Pitts 发表的一篇论文。根据转换的输出不同,有两种类型的有限状态机:

  • Mealy Machine(1955年,George H. Mealy):输出与状态、输入有关。
  • Moore Machine(1956年,Edward F. Moore):输出只与状态有关,与输入无关。

基本概念

状态机四要素:

  • Source State:状态机现在所处的状态;
  • Event:当满足一定条件时,将会触发一个动作;
  • Action:条件满足后执行的动作;
  • Target State:当执行完动作后,状态机将转变成的状态

状态机分类

DFA(Deterministic Finite Automaton)

确定有限状态机,状态机的一个状态,经过一个确定事件,会转向一个固定的状态。

image.png

NFA(Non-deterministic Finite Automaton)

非确定有限状态机,状态机的一个状态,经过一个确定事件,可以转向多个状态。

image.png

DFA 与 NFA 之间可以相互转换

Spring Statemachine Demo:CD Player

状态

public enum Events {
    PLAY, STOP, PAUSE, EJECT, LOAD, FORWARD, BACK
}

事件

public enum States {
    BUSY,
    PLAYING,
    PAUSED,
    IDLE,
    CLOSED,
    OPEN
}

动作

例子中提供了 ClosedEntryActionLoadActionPlayActionPlayingActionTrackAction 5个动作

public static class LoadAction implements Action<States, Events> {

    @Override
    public void execute(StateContext<States, Events> context) {
        Object cd = context.getMessageHeader(Variables.CD);
        context.getExtendedState().getVariables().put(Variables.CD, cd);
    }
}

参考:

Spring Statemachine 官方文档

Spring Statemachine Demo

Understanding State Machines