有限状态机

有限状态机以及有限状态机的应用

Posted by Lerko on December 26, 2016

认识有限状态级

fsm

有限状态机器有3个特征

  • 状态总数(state)是有限的。
  • 任一时刻,只处在一种状态之中。
  • 某种条件下,会从一种状态转变(transition)到另一种状态。

在js中的应用

下面介绍一个有限状态机的函数库Javascript Finite State Machine。这个库非常好懂,可以帮助我们加深理解,而且功能一点都不弱。 该库提供一个全局对象StateMachine,使用该对象的create方法,可以生成有限状态机的实例。

  var fsm = StateMachine.create();
  //生成的时候,需要提供一个参数对象,用来描述实例的性质。比如,交通信号灯(红绿灯)可以这样描述:
  var fsm = StateMachine.create({
  
    initial: 'green',
  
    events: [
      { name: 'warn',  from: 'green',  to: 'yellow' },
      { name: 'stop', from: 'yellow', to: 'red' },
      { name: 'ready',  from: 'red',    to: 'yellow' },
      { name: 'go', from: 'yellow', to: 'green' }
    ]
  
  });
  

交通信号灯的初始状态(initial)为green,events属性是触发状态改变的各种事件,比如warn事件使得green状态变成yellow状态,stop事件使得yellow状态变成red状态等等。 生成实例以后,就可以随时查询当前状态。

 fsm.current //返回当前状态。
 fsm.is(s) //返回一个布尔值,表示状态s是否为当前状态。
 fsm.can(e) //返回一个布尔值,表示事件e是否能在当前状态触发。
 fsm.cannot(e) //返回一个布尔值,表示事件e是否不能在当前状态触发。

更多概念查看阮一峰博客