私は現在、ジェネリック ステート マシンを構築してStateMachine
おり、ジェネリック パラメーターを使用してのコンストラクターを使用して、マシンに何もすることがない場合に備えて、作成時にフォールバック状態を設定しています。
新しい状態オブジェクトを作成する必要があるときに状態マシン自体で使用されるコンストラクターと、状態マシンを初めて初期化するときに使用されるコンストラクターの 2 つを使用するのは悪い習慣ではないかと考えていました (デフォルトのフォールバック状態を設定します)。 .
私の最大の質問:ジェネリックを乱用していませんか? ジェネリックを使用してはいけない場合はありますか?
ステート マシンの作成:
//The generic parameter is the default "fallback" state.
_nodeStateMachine = new NodeStateMachine<IdleNodeState>();
ステート マシン コンストラクター:
public NodeStateMachine()
{
_currentState = new T();
}
NodeStateMachine
クラスで状態がどのように変更されるかを次に示します。
public void ChangeState<U>() where U : INodeState, new()
{
_nextState = new U();
}
問題のコンストラクターは、状態自体に直接存在します。
public NullNodeState(){} // To use the class generically.
public NullNodeState(ConditionCheck check)
{
_nullCheck = check;
}