ストラテジパターンを実装する場合、どのストラテジを使用するか決定するコードはどこに置かれますか?いくつかのサンプル疑似コードが役に立ちます。ストラテジパターンの実装
答えて
この決定は、戦略パターンを使用するオブジェクトのクライアントによって行われます。例えば、キャラクターオブジェクトを持っているとしましょう。キャラクターオブジェクトは、キャラクターオブジェクトがあり、そのキャラクターオブジェクトには、キャラクターオブジェクトがあります。キャラクターが使用する武器を選択すると、使用する戦略の決定はゲームのプレイヤーによって行われます。
文字と武器(この例では戦略パターンの2つの主要コンポーネント)は、文字と武器を使用するコードではなく、使用する戦略を決定しません。新しいWeaponオブジェクト(RayGunWeaponなど)を作成し、それをCharacterに与えることによってCharacterの動作が変更されます。
戦略を明示的に選択するコードを書くことはできますが、このパターンの本当の価値は、実行時に行うことができるということです。
どの戦略をとるかは、どちらが解決するかによって決まります。時には、作成時に戦略を解決することができます。それは簡単な答えです。
どのように暗示するかは、コードの場所、実行時にコンパイルされるか実行されるかを決定します。
たとえば、依存性注入(DI)を使用すると、xmlファイルを変更することによって、実行時に異なる戦略を注入することができます。
AOPを使用すると、アスペクトの書き方によって、実行時またはコンパイル時になります。
Spring Frameworkを使用している場合は、DIを使用する場合と似ており、別のクラスの配線ほど簡単です。
サービスロケータを使用する場合は、別のDLLを簡単に交換することができます。
基本的に戦略パターンを実装する方法はたくさんありますが、ここではいくつか挙げておきますので、それが依存するコメントは非常に正しいものです。
- 1. ストラテジパターンの可変パラメータ
- 2. Java - ファクトリとジェネリックのストラテジパターン
- 3. 異なるメソッドシグネチャを持つストラテジパターン
- 4. リストのアレイベースの実装(カーソルの実装)
- 5. XMLドキュメントインターフェイスの実装とクラスの実装
- 6. Tomcat:java.security.Principalの実装
- 7. llvm.pow.f64の実装
- 8. ログウォッチャーの実装
- 9. パーシャルビューの実装
- 10. パーサーの実装
- 11. strncmpの実装
- 12. 角の実装
- 13. クヌースモリスプラットアルゴリズムの実装
- 14. ジグザグトライアングルトラバーサルの実装
- 15. INavigationServiceの実装
- 16. リクエストレスポンスデザインの実装
- 17. Ocamlの実装
- 18. ヒープソートの実装
- 19. ライセンスチェックライブラリの実装
- 20. Haskellの実装
- 21. Android:Dropboxの実装
- 22. スレッドの実装
- 23. ブロッキングキューの実装
- 24. ハッシュコードの実装
- 25. AllowColumnReorderの実装
- 26. Grails:SSOの実装
- 27. クラスの実装
- 28. BidirectionalGridLSTMの実装
- 29. ガロアカウンタモードの実装
- 30. ピーコックテストの実装