00.js状态机

有限状态机的库

image.png

安装

在浏览器中:

  

下载源码 或 压缩版

通过npm:

  npm install --save-dev javascript-state-machine

通过Node.js:

  var StateMachine = require('javascript-state-machine');

使用

可以使用以下方法构造状态机:

  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.state

...向不同状态转换的方法:

  • fsm.melt()
  • fsm.freeze()
  • fsm.vaporize()
  • fsm.condense()

...在转换的生命周期中自动调用的观察者方法:

  • onMelt()
  • onFreeze()
  • onVaporize()
  • onCondense()

...以及下列帮助方法:

  • fsm.is(s) - 如果状态s是当前状态的话返回true
  • fsm.can(t) - 如果从当前状态可以转换到t状态返回true
  • fsm.cannot(t) - 如果从当前状态无法转换到t状态返回true
  • fsm.transitions() - 返回从当前状态允许转换到的状态列表
  • fsm.allTransitions() - 返回所有可能转换的列表
  • fsm.allStates() - 返回所有可能的状态

术语

状态机由一组状态组成

  • solid
  • liquid
  • gas

状态机通过转换动作来完成状态转换

  • melt
  • freeze
  • vaporize
  • condense

状态机可以通过观察来执行转换过程中的操作。[生命周期事件]。(docs/lifecycle-events.md)

  • onBeforeMelt
  • onAfterMelt
  • onLeaveSolid
  • onEnterLiquid
  • ...

状态机也可以具有任意的[数据和方法]。(docs/data-and-methods.md).

一个状态机的多个实例可以使用状态机工厂来创建。

文档

  • 状态和转换动作
  • 数据和方法
  • 生命周期事件
  • 异步转换
  • 初始化
  • 错误处理
  • 状态的历史记录
  • 可视化

你可能感兴趣的:(00.js状态机)