8

特に JavaScript の階層型ステート マシンに非常に興味があり、このフレームワークを見つけて、その外観が気に入りました。ただし、階層操作を実行できるかどうかはわかりません。

階層状態マシンのソリューションが既に存在することを知っている人はいますか?

4

3 に答える 3

4

この記事で説明されているパターンのようなものが必要な場合は、リンクしたフレームワークで次のことができるようになります。

ステートマシンクラス

プロトタイプのコールバックを含むステートマシン機能をプロトタイプに適用し、インスタンスを構築するときに使用するスタートアップイベントを提供することで、クラスのすべてのインスタンスを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"); }
  
于 2012-05-04T00:46:56.103 に答える
3

見てみましょう: https://github.com/steelbreeze/state.js

UML 2.x 仕様に厳密に準拠した方法で、交互の状態 (状態、疑似状態、および最終状態) と領域の階層をサポートします。プロジェクトはまだ始まったばかりですが、基本はそろっています。

于 2013-05-31T12:37:07.293 に答える