状态机,通常指的是有限状态机(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)
确定有限状态机,状态机的一个状态,经过一个确定事件,会转向一个固定的状态。
NFA(Non-deterministic Finite Automaton)
非确定有限状态机,状态机的一个状态,经过一个确定事件,可以转向多个状态。
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
}
动作
例子中提供了 ClosedEntryAction、LoadAction、PlayAction、PlayingAction、TrackAction 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);
}
}
参考: