Skip to content

有限状态机

概念

  • 状态(State):系统在某一时刻所处的稳定情形
  • 事件(Event):触发状态变化的外部或内部刺激
  • 转移(Transition):在某状态下,因某事件而进入的下一状态
  • 动作(Action,可选):状态进入、退出或转移时执行的行为

设计原则

  • 状态应当“互斥且穷尽”
  • 状态描述“阶段”,而不是“动作”
  • 状态数量越少越好,但不能牺牲语义清晰度
  • 事件本身不决定行为,状态 + 事件 才决定行为及转移
  • 动作不应决定下一个状态,状态的转移发生在事件处理时,动作和状态转移可以是“并列”的,但不能是“因果”的

设计流程

  1. 确认变量
  2. 针对变量列出真值表
  3. 说明每个条件下的动作
  4. 合并一些相同处理的情况
  5. 设计表示状态的变量
  6. 代码实现

1、2、3 步骤保证了状态完整且边界清晰,4、5 步骤对状态的情形进行了化简。

例子

Example: Double-click state machine

自定义的“鼠标双击”状态:

  1. 第二次点击,第一次点击,连续点击的次数
  2. 列出真值表
  3. 说明情况
  4. 合并情况