美文网首页
界面上的有限状态机(三)

界面上的有限状态机(三)

作者: 寻找无名的特质 | 来源:发表于2020-12-24 06:10 被阅读0次

    前面介绍了状态和转移的基本用法,还有一些针对复杂场景的高级功能,这里介绍一下。

    状态通配符“*”

    前面我们提到了,可以从多个状态转换到一个状态,比如“重置”。如果状态很多,每增加一个状态就需要在重置的转移列表中进行增加,不仅增加工作量,而且代码冗余不好维护,这时,可以使用通配符“*”代替任意状态:

      var fsm = new StateMachine({
        transitions: [
          // ...
          { name: 'reset', from: '*', to: 'A' }
        ]
      });
    

    条件转移

    状态机允许目标状态是一个函数,在运行时动态确定状态,实例代码如下:

     { name: 'step', from: '*', to: function(n) { return ... } }
    

    使用GOTO强制状态转移

    状态机允许使用GOTO强制进行状态转换,实例代码如下:

      var fsm = new StateMachine({
        init: 'A'
        transitions: [
          { name: 'step', from: 'A', to: 'B'                      },
          { name: 'step', from: 'B', to: 'C'                      },
          { name: 'step', from: 'C', to: 'D'                      },
          { name: 'goto', from: '*', to: function(s) { return s } }
        ]
      })
    

    需要说明的是,条件转移和GOTO可能带来某些场景下实现的方便,但这些功能的使用破坏了有限状态机的概念,不建议使用。

    相关文章

      网友评论

          本文标题:界面上的有限状态机(三)

          本文链接:https://www.haomeiwen.com/subject/wtzlnktx.html