戦略パターンを実装するとき、使用する戦略を決定するコードをどこに配置しますか? いくつかのサンプル疑似コードが役立ちます。
3 に答える
その決定は、戦略パターンを使用するオブジェクトのクライアントによって行われます。たとえば、キャラクターがその時点で持っている武器に基づいて、異なる攻撃スタイルを使用して他のキャラクターを攻撃するキャラクター オブジェクトがあるとします。使用する戦略の決定は、ゲームのプレイヤーがキャラクターが使用する武器を選択するときに行われます。
そのため、使用する戦略を決定するのは、キャラクターも武器 (この例の戦略パターンの 2 つの主要コンポーネント) ではなく、キャラクターと武器を使用するコードが決定します。新しい Weapon オブジェクト (RayGunWeapon など) を作成し、それをキャラクターに「与える」だけで、キャラクターの動作が変わります。
ストラテジーを明示的に選択するコードを作成することもできますが、このパターンの真の価値は実行時に実行できることだと思います。
どのように実装するかによって、コードの場所、およびコードがコンパイルされるか実行時に行われるかが決まります。
たとえば、依存関係の挿入 (DI) を使用する場合、xml ファイルを変更することで、実行時に別の戦略を挿入できることがよくあります。
AOP を使用する場合は、アスペクトの記述方法に応じて、実行時またはコンパイル時になります。
Spring Framework を使用する場合、それは DI を使用するのと同様であり、別のクラスで配線するのと同じくらい簡単です。
サービス ロケータを使用する場合、別の DLL にスワップするのと同じくらい簡単です。
基本的に、戦略パターンを実装するには多くの方法があります。いくつかをリストしただけなので、依存しているというコメントは非常に正しいです。
どの戦略を取るかは、いつ決定するかによって異なります。作成時に戦略を解決できる場合もあれば、実行時に解決できる場合もあります。それが依存する簡単な答え。