JavaScript 的分层状态机

Hierarchical state machines for JavaScript

本文关键字:状态机 分层 JavaScript      更新时间:2023-09-26

我对分层状态机非常感兴趣,尤其是在JavaScript中,我发现了这个框架,喜欢它的外观。但是我不确定它是否可以执行分层操作。

有没有人知道已经有层次结构状态机的解决方案?

如果你想要类似本文中描述的模式,看起来你链接的框架可以做到这一点:

状态机类

您还可以通过将状态机功能应用于原型(包括原型中的回调)并提供启动事件以在构造实例时使用,将类的所有实例转换为 FSM:

MyFSM = function() {    // my constructor function
  this.startup();
};
MyFSM.prototype = {
  onpanic: function(event, from, to) { alert('panic');        },
  onclear: function(event, from, to) { alert('all is clear'); },
  // my other prototype methods
};
StateMachine.create({
  target: MyFSM.prototype,
  events: [
    { name: 'startup', from: 'none',   to: 'green'  },
    { name: 'warn',    from: 'green',  to: 'yellow' },
    { name: 'panic',   from: 'yellow', to: 'red'    },
    { name: 'calm',    from: 'red',    to: 'yellow' },
    { name: 'clear',   from: 'yellow', to: 'green'  }
  ]});

这应该很容易调整,以适应您适当的对象构造机制。

换句话说,在这一点上,你应该能够做通常的JavaScript继承的事情,比如:

function MyCalmFSM() {
    MyFSM.apply(this, arguments);
}
MyCalmFSM.prototype = Object.create(MyFSM.prototype);
MyCalmFSM.prototype.constructor = MyCalmFSM;
// Don't panic
MyCalmFSM.prototype.onpanic = function(event, from, to) { alert("Don't panic"); }
  

看看: https://github.com/steelbreeze/state.js

它支持交替状态(状态、伪状态和最终状态)和区域的层次结构,其方式与 UML 2.x 规范非常一致。 该项目还处于早期阶段,但基础知识已经存在。

我知道

这是一个古老的问题,但你可以看看基于jQuery的iFSM库,它可以设计HSM:https://github.com/intersel/iFSM