Contents

有限状态机

FSM

有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。FSM是一种算法思想,简单而言,有限状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。现实世界中存在大量具有有限个状态的系统:钟表系统、电梯系统、交通信号灯系统、通信协议系统、正则表达式、硬件电路系统设计、软件工程,编译器等,有限状态机的概念就是来自于现实世界中的这些有限系统。 一般有限状态机可以用状态图精确的描述: /images/fsm_1.png

有限状态机模型

状态:指的是对象在其生命周期中的一种状况。处于某个特定状态中的对象必然会满足某些条件,或者执行某些动作,或者等待某些事件。 事件:指的是在时空上占有一定的位置,并且对状态机是有一定意义的事情,事件会造成状态的迁移。 转换:指的是两个状态之间的一种关系,表明某个对象将在第一个状态中执行一定的动作,并将在某个事件发生时满足某个特定的条件,从而进入到第二个状态。 动作:指的是状态机中可以执行的原子操作(不能被中断)。

实现FMS的方式

1.switch-case或if-else

这种方式虽然比较原始,但是效率比较高,实现起来也比较容易。

/images/fsm_2.png

这是一个典型的协议解析状态机,逻辑清晰易于理解。switch-case类的状态机如果在简单状态场景下使用的话比较方便,一旦涉及到状态之间关系转换复杂,那这种状态机实现起来就有些困难。

2.状态表

状态表中横坐标表示状态,纵坐标表示输入,每一个元素表示下一个状态。 /images/fsm_3.png

3.使用宏定义描述状态机

4.面向对象的设计模式