問題タブ [chain-of-responsibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
39 参照

python - メソッドの複数の呼び出しで使用される引数の条件: 呼び出し元によって強制されるか、メソッドによって強制されるか?

クラス Aのオブジェクトaがあるとします。特定のタイプの別のオブジェクトの形式で引数を必要とするメソッドがありますが、メソッドによって実行される操作のため、引数も特定の状態である必要があります (たとえば、外部サービスをクエリしているとしますが、それは何か他のものである可能性があります)。 ) が必要です。

私の頭に浮かぶ最初の解決策は単純です。メソッドは入力データに条件を適用する必要があります。必要な状態をテストしてから、例外を発生させるか、状態を変更する必要があります。

ただし、私たちが話しているインスタンスは、Aの多くのインスタンスの 1 つにすぎません。これらすべてのインスタンスは、入力データに対して同じ操作を実行する必要があります。特定の状態をテストしてから強制するか、単に例外を発生させます。必要な状態が外部呼び出し元によって既に強制されているパラメーターの共有インスタンス、クラス Bのインスタンスを使用できるようです。

メソッドによって実行される操作は、メソッド内の引数の必要な状態を強制しないと適切にカプセル化されないと思うので、以前の呼び出し元に移動する必要があると思います。オブジェクトaとクラス Aの他のすべてのインスタンスは、操作を実行するために必要なデータを提供するだけです。

ただし、別の問題があります。操作は、別のデータを取得するためにA のインスタンスに関連する方法で解釈できる値を返します。現在、操作 do_something はクラス Aのメソッドにカプセル化する必要があるようです。

この問題を解決するにはどうすればよいですか? 現在の設計を維持し、操作によって提供される戻りコードを解釈するために使用できる戻りデータをobjectにする必要がありますか? おそらく、コマンド パターンのチェーンを使用し、クラス Aを変更して、操作を A の他のインスタンスに委任する必要がありますか? 私がそれを処理できる他の方法は何ですか?

0 投票する
1 に答える
957 参照

java - 責任の連鎖 - リクエストをすべての連鎖に渡す

Web を閲覧しましたが、質問に対する回答が見つかりませんでした...

3つのチェーンがあるとしましょう。リクエストが 3 つのチェーンすべてを通過するようにします (チェーンがリクエストを処理できるかどうかは関係ありません)。この問題に CoR パターンを使用することは可能ですか?

もっとわかりやすく説明すると、いくつかのルールセットを通過する必要があるリストがあります。最初のルールに合格した場合、リストは同じままです。次に 2 番目のルールに進み、2 番目のルールでリストが変更されます。変更されたリストは 3 番目のルールに進み、変更されたリストはパスして保存されます。 チェーン

0 投票する
1 に答える
175 参照

swift - Swift コンパイラは、ジェネリックの再帰的な使用を解決できません

Swift で一連の責任パターンを実装しようとしています。

私のクラスではコンパイル エラーは発生しませんが、単純なユース ケース (以下のようなもの) は機能しません。次のエラーが発生します。error: cannot invoke 'endWith' with an argument list of type '((_?) -> ()) ; expected an argument list of type '((U?) -> Void)'

何か考えはありますか?

Swift でのジェネリック使用のエッジ ケースであることはわかっています。ただし、ジェネリック型を明示的に特殊化することはできないため、これまで解決策が見つかりませんでした。

0 投票する
1 に答える
920 参照

design-patterns - 責任の連鎖とケースステートメント

Chain of Responsibility について読んだとき、クライアントを実際のデータ処理から分離することについて述べています。つまり、クライアント プログラムがチェーンの最初のメンバーを呼び出し、そのメンバーが要求を処理できるかどうかを判断し、処理できる場合は処理し、そうでない場合はチェーンの次のメンバーを呼び出すということです。

追加のメンバーをチェーンに追加でき、それを処理するためにクライアント プログラムを実際に変更する必要がないことを読みました。ウィキペディアを含む例で私が見ているのは、クライアントがチェーンの各メンバーをインスタンス化し、チェーンの各メンバーのサクセサーを設定する必要さえあるということです。

チェーン内のオブジェクトの順序がクライアントによって決定され、クライアントがチェーン内の各オブジェクトをインスタンス化する必要がある場合、これはどのように疎結合と見なされるのでしょうか?

0 投票する
1 に答える
65 参照

c# - 責任の連鎖 - Servicer1 が Servicer2 を呼び出していない

Servicerクラスの文字列内の文字/文字列を検索することにより、一連の責任パターンの使用を実証しようとしています。コードは実行されますが、Servicer1 ServiceReq は Servicer2 ServiceReq を呼び出していません。これを「g」で実行すると、「Checked Servicer1'」のみが表示されますが、「Checked Servicer1'」「Request found in Servicer 2」が表示されるはずです。

フォームコード:

0 投票する
1 に答える
119 参照

oop - 異なる「出力レベル」でリクエストを実行するための設計パターン

次のような文字列を解析しています:

requestLeaf オブジェクトである1からn 個の引数を永続化する複合データ構造に変換します。この引数はrequestLeaf オブジェクト(プレーン テキストの場合は、上記のように返される必要があります ("hello world")) または別のrequestComposite オブジェクト(再びプレーンテキストになるまで(読み取り->顧客など)何らかの計算が行われている場合。

私が達成したいのは、コンポジット全体をループして、ある種のドキュメントをレンダリングすることです。

最初のコンポジットの引数またはリーフは、ドキュメントに出力するためのルートまたはレベル 0 を表しています。 これにはライブラリを使用したいと考えています。このライブラリは、テキスト、画像などの印刷を処理できますが、何も評価できません!

すべて> レベル 0は、別のライブラリで計算する必要があります。
このライブラリは、メンバー値を読み取り、計算などを行い、最終的な値 (文字列のみ) をルートに返して出力することができます。
他のすべては、たとえば \img() または \text() を介して明示的に出力されます

あるかもしれません

メンバー値 X をルックアップするためのトークン
。値は暗黙的に出力されます (別の \text() にラップせずに)!

次のように、指定されたメンバー リストを介して引数をループする \list() トークンがある場合があります。

X は別の Y である可能性があります

つまり、構造がどこまで深くなるかわからないということです。

私は、特にデザイン パターンと OO にかなり慣れていません。レンダリング/出力ライブラリと計算ライブラリがハンドラーチェーンを構築している「実行」のための責任
パターン のチェーンをいじっています。 しかし、CoR が本当に私のニーズを満たしているかどうかについては、少し興味があります。

このような問題をどのように解決しますか?

編集:今のところ私のアプローチ

  1. コンポジットを反復します。出力ライブラリ計算ライブラリ を含むMediatorオブジェクトを
    渡します。

  2. 現在のリーフがテキストの場合
    、現在がルートであるかどうかをチェックする
    NO の場合、計算ライブラリにアクセスして実際の値を評価し、関係する人に渡します (例: \read()、\varput()、...)
    YES の場合、それを印刷するための出力ライブラリ

私の頭に浮かぶのは、自動ルート印刷を実現するには、両方のライブラリにすべての requestMethod を実装する必要があるということです。つまり、出力の
\read() はテキストをドキュメントに出力
し、計算ライブラリの \read() はメンバー値を検索する必要があります。

ここで物事を過度に複雑にしていますか?

0 投票する
1 に答える
6678 参照

java - 責任の連鎖 - ラムダ関数の実装

Java 8 で Lambda を使用して Chain of Responsibility パターンをどのように実装しますか?


この記事には次の段落しか見つかりませんでした。

責任の連鎖

別のラムダにデリゲートする場合としない場合があるラムダ、別のラムダにデリゲートする場合としない場合があるラムダ、無限。(ラムダへの「次の」参照を取得する方法は、読者の演習として残されています。)