4

GoF パターンを見ると、State パターンと Stategy パターンの類似点がかなり際立っていることがわかります。どちらもポリモーフィック クラスを交換して動作を変更します。他の誰かが同じことを見つけましたか?

正確な違いは何ですか?

4

2 に答える 2

7

状態パターンと戦略パターンは、どちらも動作を別々のオブジェクトにカプセル化し、合成を使用して合成オブジェクトに委譲して動作を実装するという意味で似ています。ランタイム。ただし、いくつかの重要な違いがあります。

  1. 状態パターンでは、クライアントは状態オブジェクトについて何も知りません。状態の変更は、クライアントに対して透過的に発生します。クライアントはコンテキストでメソッドを呼び出すだけで、コンテキストは自身の状態を監視します。クライアントは状態の変化を認識していないため、状態の変化によって動作が変化するたびに、コンテキストが別のクラスからインスタンス化されているように見えます。オブジェクトは、パターン状態の公式定義としてクラスを変更するように見えます。このパターンは、明確に定義された一連の状態遷移を中心に構築されています。状態の変更は、パターンの存在の鍵です。

  2. 戦略パターンは、構成された戦略オブジェクトを動的に変更することによって動作を変更する柔軟性を提供しますが、ほとんどの場合、各コンテキストに適切な戦略オブジェクトが既に設定されています。つまり、パターンは構成された戦略オブジェクトを動的に変更する方法を提供しますが、その必要性はあまりありません。変更を行う必要がある場合でも、変更を行うのはクライアントです。クライアントはコンテキストでセッター メソッドを呼び出し、新しい戦略オブジェクトを渡します。したがって、動作の変更はクライアントに対して透過的ではなく、クライアントによって開始および制御されます。このパターンは、状態パターンのように明確に定義された一連の動作変更を促進しません。クライアントは戦略オブジェクトについて知っており、通常、作成中に適切な戦略オブジェクトをコンテキストに設定します。

    追加情報については、以下のリンクを参照してください http://myrandomsparks.blogspot.in/2012/05/strategy-vs-state-pattern.html

于 2013-08-08T04:14:23.217 に答える
0

戦略パターンはアクションを実行する「方法」を決定し、状態パターンはそれらを実行する「タイミング」を決定します。

State パターンを使用することにより、状態保持 (コンテキスト) クラスは、それがどのような状態または型であるか、およびどのような状態または型が使用可能であるかを知る必要がなくなります。これは、クラスがオープン/クローズド設計原則 (OCP) に準拠していることを意味します。クラスは、存在する状態/型の変更に対して閉じられていますが、状態/型は拡張に対して開かれています。

戦略パターンを使用することにより、アルゴリズムを使用する (コンテキスト) クラスは、特定のタスク (「アルゴリズム」) を実行する方法の知識から解放されます。このケースでは、OCP への準拠も作成されます。このタスクを実行する方法に関する変更についてクラスは閉じられていますが、このタスクを解決するための他のアルゴリズムの追加に対して設計は非常にオープンです

于 2013-08-08T04:09:35.690 に答える