有限状态机的库

安装
在浏览器中:
<script src='state-machine.js'></script>
通过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).
一个状态机的多个实例可以使用状态机工厂来创建。
网友评论