1

ウィキペディアの戦略パターンの例を実際の問題に変換しようとしていますが、私のシナリオでそのようなパターンが必要かどうかはわかりません。

サイズに応じて、複数のクライアントから更新を取得し、いくつかの処理を実行してこれらの更新を進める必要があるサービスがあるとします。サービスをできるだけシンプルに保ち、(他のクライアントからの)将来の更新フォーマットにも対応できるようにしたいと思います。

このパターンを使用することで、更新自体に処理方法と前進方法を決定させ、サービスを可能な限りシンプルにすることができると思いました。このようなもの:

public class Service {
    void processUpdate(Update myUpdate) {

        myUpdate.process();
        myUpdate.moveForward();
    }
}         

私が間違っている ?どのように(どこで...)各更新に戦略を割り当てるのですか?

4

2 に答える 2

5

デザインパターンで悪い仕事をする最も簡単な方法は、パターンを学び、それを置く場所を見つけようとすることです。私が最初に学んだときにこれを数回行いましたが、結果は非常に苛立たしいものでした。

戦略パターンは、特定の形の問題に対する解決策です。その問題は「基本的に同じことをする必要があるが、途中でいくつかのバリエーションがある」ということです。したがって、今のところ、戦略パターンの実行方法を覚えておいてください。それを示唆する問題が見つかったら、それを使用してください。

于 2013-03-24T19:58:16.283 に答える
2
  • 戦略とは何ですか?戦略とは、特定の目標を達成するために設計された行動計画です。
  • 「アルゴリズムのファミリーを定義し、それぞれをカプセル化して、互換性を持たせます。戦略により、アルゴリズムはそれを使用するクライアントとは独立して変化します。」(ギャングオブフォー);
  • クラスのセットを指定します。各クラスは潜在的な動作を表します。これらのクラスを切り替えると、アプリケーションの動作が変わります。(戦略);
  • この動作は、実行時(ポリモーフィズムを使用)または設計時に選択できます。
  • インターフェイスで抽象化をキャプチャし、実装の詳細を派生クラスに埋め込みます。

ここに画像の説明を入力してください

  • 戦略の代替手段は、条件付きロジックを使用してアプリケーションの動作を変更することです。(悪い);
  • このパターンを使用すると、アプリケーションの全部または一部を再コーディングして再テストすることなく、特定の動作を簡単に追加または削除できます。

  • 良い使い方:

    • 同様のアルゴリズムのセットがあり、アプリケーションのさまざまな部分でそれらを切り替える必要がある場合。ストラテジーパターンを使用すると、ifを回避し、メンテナンスを容易にすることができます。
    • スーパークラスに新しいメソッドを追加したい場合、必ずしもすべてのサブクラスに意味があるとは限りません。従来の方法でインターフェースを使用する代わりに、新しいメソッドを追加して、新しいFunctionalityインターフェースのサブクラスであるインスタンス変数を使用します。これは構成として知られています。継承を通じて能力を継承する代わりに、クラスは適切な能力を持つオブジェクトで構成されます。
于 2013-05-24T15:40:34.780 に答える