私は状態パターンで利益を得ることができるクラスを持っています。ただし、一般的な「型コードを状態/戦略に置き換える」リファクタリングは私の場合にはうまく適合しないようです。状態は他のオブジェクトを監視して計算され、型コード変数はありません。
私のクラスコードのほとんどは、呼び出されたときにいくつかの状態を「計算」し、その状態の関数を実行するだけです。
型コード変数を強制することは、次の理由で間違っていると感じます。
ポリモーフィック関数が使用されているすべての場所で、「updateState()」関数を呼び出す必要があります。
私のクラスはもはや 100% の振る舞いではなくなります。
関数が呼び出されるたびに状態を計算する必要があるため、間違ったパターンを考えているのではないかと思います。
通常、私はこれをリファクタリングします:
if (this.someOtherThingIsRunning()) {
...
} else {
...
}
このような:
typecode.doSomething()
// that being polymorphic
それは奇妙に思えます:
updateTypeCode()
typecode.doSomething()
状態パターンはこの場合に適用されますか? 型コードなしでポリモーフィズムから引き出される代替戦略はありますか?