State パターンの典型的な実装から私が収集したのは次のとおりです。
問題:現在の状態に基づいて動作が変化 するオブジェクトOを表します。
解決策:
1.このオブジェクトO内の別のオブジェクトSが状態を表すとします
2. オブジェクトSはOの適切な操作を呼び出し
ます 3. オブジェクトSはオブジェクトOの次の状態を決定します
私の懸念は主に#3
. 状態遷移表は、基本的にすべての状態に広がっています。これらのソリューションは、非常に迅速に管理するのが面倒になるのを見てきました。これらの状態は、インジケーターではなく、状態マシンに関する情報を保持しすぎています。気になりますが、かなり合理的だと思います (
Moore machine .) 私が見た唯一の問題は、バグ修正/デバッグ中に発生することです: コードのナビゲーション/理解は、すべての状態マッピングをメモリにコミットするまで困難になります。#2
次の実装はより正確でしょうか?
状態を列挙として表し、オブジェクトは列挙が保持する値に基づいてアクションを決定します。これらstate transitions
は、現在の状態から次の状態へのマップであるテーブル (δ、状態遷移関数) にあります。これstate transition table
は、実行されるアクションも保持します ( Mealy machine )