概念
finite-state machine(FSM),有限状态机;又称有限状态自动机(finite-state automation:FSA)。
表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。
有限状态机(有时称为有限状态Automaton)是可以使用硬件或软件实现的计算模型,可用于模拟顺序逻辑和一些
计算机程序。有限状态自动机会生成常规语言。有限状态机可用于模拟许多领域的问题,包括数学,人工智能,
游戏和语言学。
有两种类型的有限状态机(FSMs):确定性有限状态机,通常称为确定性有限自动机,以及非确定性有限状态机,
通常被称为非确定性有限自动机。状态机在视觉上表示的方式有轻微的变化,但它们背后的想法源于相同的计算思想。
我们一般讨论的有限状态机就是确定性有限状态机(deterministic finite automaton:DFA)。
有限状态机包含五个概念:
- 一组有限的状态
- 有限,非空的输入
- 一系列 transition functions
- start 状态
- 一组结束状态

FSM的软件设计
对应五元素,一个DFA的软件表达可以是:
type oDfa struct {
currentState string
inputOpt interface{}
transaction func() bool
targetState string
}
type DFA struct {
starteState string
stateSet []oDfa
}
在实际实现时,需要考虑的地方会比较多:
- 将transaction分解为多个阶段,比如:Go Fsm中实现的那样(下图示)
- 需要考虑transaction执行如何满足原子性
- 需要考虑在transaction中执行失败的解决机制
- 需要考虑最终一致性的解决方案
- 。。。
正因为中间需要解决的实际问题非常多,所以在Fsm的库一般也只是满足一些基本状态迁移的特性。

使用Fsm方式进行软件分析
为了完整的把业务状态和它们之间的迁移关系表现出来,需要整理一份下面这样的的表格:
