有限状态机是什么?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/tianxintiandisheng/article/details/102743799

有限状态机是什么

有限状态机(Finite-state machine)是一个非常有用的模型,可以模拟世界上大部分事物。

简单说,它有三个特征:

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

有限状态机的使用

  1. 引入有限状态机的js库

 <script src='state-machine.js'></script>

  1. 有限状态机的基本结构

 var fsm = new StateMachine({

    init: 'solid',

    transitions: [

      { name: 'melt', from: 'solid', to: 'liquid' },

      { name: 'freeze', from: 'liquid', to: 'solid' },

      { name: 'vaporize', from: 'liquid', to: 'gas' },

      { name: 'condense', from: 'gas', to: 'liquid' }

    ],

    methods: {

      onMelt: function() { console.log('I melted') },

      onFreeze: function() { console.log('I froze') },

      onVaporize: function() { console.log('I vaporized') },

      onCondense: function() { console.log('I condensed') }

    }

  });

基本操作

生成实例以后,就可以随时查询当前状态。


* fsm.current :返回当前状态。

* fsm.is(s) :返回一个布尔值,表示状态s是否为当前状态。

* fsm.can(e) :返回一个布尔值,表示事件e是否能在当前状态触发。

* fsm.cannot(e) :返回一个布尔值,表示事件e是否不能在当前状态触发。

Javascript Finite State Machine允许为每个事件指定两个回调函数,以warn事件为例:


* onbeforewarn:在warn事件发生之前触发。

* onafterwarn(可简写成onwarn) :在warn事件发生之后触发。

同时,它也允许为每个状态指定两个回调函数,以green状态为例:


* onleavegreen :在离开green状态时触发。

* onentergreen(可简写成ongreen) :在进入green状态时触发。

假定warn事件使得状态从green变为yellow,上面四类回调函数的发生顺序如下:onbeforewarn → onleavegreen → onenteryellow → onafterwarn。

除了为每个事件和状态单独指定回调函数,还可以为所有的事件和状态指定通用的回调函数。


* onbeforeevent :任一事件发生之前触发。

* onleavestate :离开任一状态时触发。

* onenterstate :进入任一状态时触发。

* onafterevent :任一事件结束后触发。

编码实战

信号灯

猜你喜欢

转载自blog.csdn.net/tianxintiandisheng/article/details/102743799