私はこのリンクを通して状態パターンについて読んでいました。戦略パターンのように見えますか?これら2つのパターンの正確な違いは何ですか?
5 に答える
国家と戦略の違いは意図にあります。Strategyを使用すると、アルゴリズムの選択はかなり安定します。Stateでは、「context」オブジェクトの状態を変更すると、Strategyオブジェクトの「パレット」から選択されます。
戦略パターンは、状態パターンと非常によく似ています。違いの1つは、コンテキストにインスタンス変数として状態が含まれ、その実装が状態に依存する可能性がある複数のタスクが存在する可能性があるのに対し、ストラテジーパターンでは、ストラテジーはメソッドに引数として渡され、コンテキストオブジェクトにはそれを格納する変数がないことです。 。
大きな違いの1つは、次のことだと思います。
-状態パターンでは、コンテキスト自体をパラメータとして、コンテキストに割り当てる必要のある状態具象クラスのメソッドに渡します。これは、最初に送信されたコンテキストに自分自身を割り当て、次にその役割を実行します。 。
-ストラテジーパターンでは、最初にストラテジーを作成するときにストラテジーをコンテキストに渡すため、「new」とを使用してメモリ内の新しいコンテキスト(ポインター)に同じ変数を割り当てない限り、プログラム全体でそのまま残ります。それに新しい戦略を割り当てます。しばらくすると、ガベージコレクターは、割り当てられた戦略で古いコンテキストを削除します。
より明確に言えば、ストラテジーは1つのコンテキストに対して固定されており、一度割り当てられると、コンテキストにストラテジーセッターがなくても変更できません。ただし、Stateの場合、コンテキストには状態のセッターがあるため、多くの状態を次々に同じコンテキストに割り当てることができます。
お役に立てば幸いです。
状態パターンでは、通常、状態のアクションによって状態が変化します。戦略パターンでは、戦略のアクションによって戦略が変更されることはありません。言い換えれば、状態変化は状態自体にあります。戦略の変更は外部条件にあります。
Steven Lottによる優れた本「Pythonオブジェクト指向プログラミング:堅牢で保守可能なオブジェクト指向Pythonアプリケーションとライブラリの構築」から。
ストラテジーパターンは、実行時にアルゴリズムを選択するために使用されます。一般に、特定のユースケースでは、これらのアルゴリズムの1つだけが選択されます。ここでの考え方は、設計プロセスのできるだけ遅い段階で、実行時に実装の選択肢を提供することです。ストラテジークラスの定義が他の実装を認識することはめったにありません。通常、各戦略は独立しています。
一方、状態パターンは、一部のプロセスが進化するにつれて、異なる状態を動的に切り替えることができるように設計されています。この例では、バイトが消費され、進化する一連の有効性条件が満たされると、状態が変化しました。状態定義は通常、さまざまな状態オブジェクトを切り替える機能を持つグループとして定義されます。