2

誰かがこれらのパターンで私の頭の中の混乱を解消してください:

  • 指揮系統
  • 責任の連鎖

私は、両方が同じであるサイト (責任の連鎖と同じであるコマンド チェーンの例) とそうでないサイトを見てきました。

これは私がそれぞれについて理解していることです:

指揮系統:

クラスは、同じインターフェースを実装するクラスのインスタンスである「コマンド」のリストを保持するプロパティを持つ CommandChain と呼びましょう。それらはすべて onCommand(command, arguments) を実装する必要があるとします。

CommandChain には、その中に新しいコマンドを登録するための addCommand() メソッドと、コマンド名とそのパラメーターを受け入れる runCommand() があります。このメソッドは、コマンドの 1 つが応答し、対応するアクションを実行し、ok を送信するまで、コマンドのリストをループする必要があります。

責任の連鎖

一部のサイトで見たように、これはほとんど同じですが、次の違いがあります。クラスにループするコマンドのリストを格納する代わりに、各コマンド インスタンスは次のコマンド インスタンスへの参照を格納します。

では、この違いは、両方の設計パターンが異なると考えるのに十分な大きさですか?

それらは実際にどのような場合に適用されますか?

4

3 に答える 3

5

同じデザインパターンです。

それらが同じプロパティを持ち、実装のみが異なる場合、それらは機能的に同じです。これは、2 つの設計パターンが同一であることを示しています。

もう 1 つのヒントは、ウィキペディアには Chain of Responsibility DP のページがありますが、Chain of Command のページはありません。

DP に関する独創的な本を書いた "Gang of Four" は、実装ではなく動作とプロパティが設計パターンを定義することを非常に明確に示していました。

于 2012-10-04T07:51:17.320 に答える
1

ある要求に基づいて複数のタスクを実行する必要がある単一のハンドラーがある場合はコマンド チェーンが使用され、各ハンドラーが 1 つのタイプの要求のみを処理できる場合は責任のチェーンが使用されるようです。例としては、火災報知器がある場合、さまざまなレベルまたは場所で火災をチェックするための多くのコマンドを代わりに発行する火災検知器にリクエストを発行できます。消防士、警備員、警察などの誰がこの火災に対応するかは、一連の責任を使用して行うことができます。

于 2012-10-03T12:41:52.410 に答える
0

The Chain of Responsibility は、Gang of Four のオリジナル デザインの 1 つであり、PHP で実装されたいくつかの例をここで見つけることができます。

http://www.php5dp.com/category/design-patterns/chain-of-responsibility/

パターンの 1 つの用途は、さまざまなデバイス (電話、タブレット、デスクトップ) 用に複数の構成を持つ Web サイトで使用する正しいデバイスを選択するための「スニファー」プログラムです。CoR パターンは、リクエストを行うクライアントと処理オブジェクトの間の結合を回避します。

ある「処理オブジェクト」が別のオブジェクトの上にないという点で階層的ではありませんが、特定の要求に最も適したオプションが見つかるまで一連のオプションを通過するという点で順次的です。

「指揮系統」は CoR の誤称である可能性もあれば、階層構造を持つまったく異なるパターンである可能性もあります。

于 2014-07-30T10:16:40.717 に答える