如何使用状态机?任务四如何使用状态机?

【修真院】javascript

小课堂 - 如何使用状态机任务四如何使用状态机?java

目录
           1.背景介绍
           2.知识剖析
           3.常见问题 
           4.解决方案
           5.编码实战 
           6.扩展思考git

           7.参考文献github

           8.更多讨论编程

1.背景介绍服务器

 1.什么是有限状态机?异步

     有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动做等行为的数学模型。函数

    

2.知识剖析:布局

     状态存储关于过去的信息,就是说:它反映从系统开始到如今时刻的输入变化。转移指示状态变动,而且用必须知足肯定转移发生的条件来描述它动做在给定时刻要进行的活动的描述。有多种类型的动做:
                进入动做(entry action):在进入状态时进行
                退出动做:在退出状态时进行
                输入动做:依赖于当前状态和输入条件进行搜索优化

                转移动做:在进行特定转移时进行

生成实例之后,就能够随时查询当前状态。

  • 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 :任一事件结束后触发。

若是事件的回调函数里面有异步操做(好比与服务器进行Ajax通讯),这时咱们可能但愿等到异步操做结束,再发生状态改变。这就要用到transition方法。

 

3.常见问题:

       JavaScript的的状态机建立的对象是如何知足状态机模型的要求的:

4.解决方案:

    能够用状态来描述事物,而且任一时刻,老是事物处于一种状态
    事物拥有的状态总数的英文有限的
    经过触发事物的某些行为,致使能够从事物一种状态过渡到另外一种状态
     事物状态变化是有规则的,A状态能够变换到B,B能够变换到C,A却不必定能变换到ç

     同一种行为,能够将事物从多种状态变成同种状态,可是不能从同种状态变成多种状态

5.编码实战

  以官方文档为例

  

 
 var fsm = new StateMachine({

    init:'solid',

    过渡:[

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

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

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

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

    ]

    方法: {

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

      onFreeze:function(){console.log('我冻结')},

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

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

    }

  });

6.更多思考

   怎样决定有限状态机的使用时机或方式

7.参考连接

https://blog.csdn.net/cdnight...

https://github.com/jakesgordo...

 

8.更多讨论

1.一个JS文件能够同时使用两个有限状态机吗?

不一样的变量名便可

 

2有限状态机一般在什么地方被用到?

      大致上编程都是对现实的抽象,有效状态机也不例外,当逻辑里面有大量判断须要转换状态时,有限状态机就有用处了,本质上其是用查表法来把处理逻辑独立到表中,从而能够用通用的代码去处理任意复杂的状态转换。具体场景有状态超多的词法分析(要识别各类关键字,运算符等等),工控软件中,有些机器的控制逻辑也能够用到,扩展开来,任何复杂状态逻辑的处理均可以。

3.有限状态机有哪些优势,与普通的,若是判断语句相比呢?

便于阅读,理解,维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。

相关文章
相关标签/搜索