問題タブ [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 投票する
1 に答える
1792 参照

design-patterns - Chain Of Responsibility 設計パターンと単純な if-elseif-else ブロックの使用の違いは何ですか?

先日、Chain Of Responsibility を調べていたところ、この例に出会いました。

基本的に、抽象ハンドラーがあり、次に具象ハンドラーがあり、それぞれが親抽象ハンドラーのハンドル メソッドを実装します。実装は、最初にこの特定のハンドラーが現在の要求を処理できるかどうかを確認するためのチェックがあり、そうでない場合は、要求を後続のハンドラーに渡すようになっています。

ここで、単純な if-else 条件付きブロックを使用して同じことを行うこともできます。上記のリンクから最初の例を取得するには、次のように変更します。

さて、私の質問は、この 2 つの根本的な違いは何ですか? if-else ブロックを使用してまったく同じ機能を提供できる場合、責任の連鎖を使用する必要がある特定の理由はありますか? パフォーマンス、メモリ消費、保守性、スケーラビリティに関して、どちらが優れていますか?

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

java - Java ActionListeners からスタンドアロン クラスへ

actionListener クラスをスタンドアロン クラスに移動する方法はありますか?

Java と MVC のデザイン パターンを使用して例を作成しました。背景色を変更するボタンが 3 つあります。

モデルはこちら

意見

コントローラ

ボタンイベントを処理するインターフェイスを作成しました

インターフェイスを実装するすべてのクラスは、ActionEvent を処理します。それができない場合は、次のクラスに渡されます (責任の連鎖として)

黄色のフォント ハンドラー

黒のフォントハンドラー

青いフォント ハンドラ

最後に、メイン メソッドでクラスを作成します。

これを機能させる方法はありますか?複数の if blick を含むイベント処理用の内部クラスは必要ありません。任意の提案をいただければ幸いです。

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

oop - 責任の連鎖の設計パターン

Chain of Responsibility パターンを直感的に感じたい。それを得るには、実際の例について学ぶのが良い方法だと思います。そのような例を共有できますか?

このパターンに関することの 1 つは、チェーンに多数のステージ (10 を超えるステージなど) がある場合、実装が非常に醜くなることです。あなたたちはそれについて何をしますか?

0 投票する
2 に答える
166 参照

design-patterns - フィルター/チェーン内の異なるハンドラーの入力パラメーターを分離する方法は?

フィルターのリストがあります。すべてのフィルターには異なる責任があり、さまざまな入力パラメーターを受け入れます。インターフェイスは次のようになります。

そして私はそれを実行します:

フィルターを追加するには、

  1. Context を変更します。たとえば、getter と setter を使用してプライベート フィールドを追加します。

  2. main() を更新して、新しい入力パラメータを埋めます。

これらすべての入力パラメーターを分離して、異なるフィルターが知る必要のある各パラメーターに集中できるようにする方法はありますか? main() のコードが安定することを願っています。ありがとう!

PS 一部のフィルターには、入力パラメーターがない場合があります。

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

c# - 責任の連鎖で明示的なキャストを取り除く方法は?

私は現在、IResponse を実装するオブジェクトを返す Chain of Responsibility を実装しています。

この実装の目的は、必要なときにいつでも簡単に実装を置き換えることができるようにすることです。問題は、オブジェクトにアクセスするなど、オブジェクトに固有のことをしたい場合は、要求した型を明示的にキャストする必要があることですfoo.SpecificMethod()

(Foo)このキャストをなくす方法はありますか?

編集:動的変数を使用してこの問題を解決することは可能ですが、静的に型付けされた方法で解決することをお勧めします。

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

c# - 並列実行でチェーンするコマンドの作成

このシナリオに適したパターンを探しています。

このようにHDDからファイルを処理する必要があります。

  1. ファイルをロード
  2. ファイルを分析する
  3. 分析結果に基づいてファイルを検証する
  4. 検証結果に基づいてアプリにファイルをインポートする

このプロセスは将来変更される可能性があります。

私の考えは、ファイルアクションごとにコマンドを作成することです(コマンドパターン)。

  • LoadFileCommand : IFileCommand
  • AnalyzeFileCommand : IFileCommand
  • ValidateFileCommand : IFileCommand
  • ImportFileCommand: IFileCommand

コード:

コマンドでプロセスを作成する必要があります(コマンドでチェーン)。

この目的のために Chain of resposibility パターンを使用しようとしましたが、より良いパターンまたはデザインが存在する可能性があります。

可能であれば、Rx を使用したいと思います。並列実行もいいでしょう。

私はこれを達成したいと思います:

何か案は。

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

design-patterns - 一部のハンドラーが独立しており、一部のハンドラーが他のハンドラーの実行に依存している状況で使用される適切なパターン

プロパティのようなオブジェクトとして入力を与えられたいくつかの属性を計算するシステムの再設計に取り組んでいます。

プロパティ関連の属性を計算するためにハンドラーを使用しています。各ハンドラは、単一のプロパティ属性情報を計算します。

問題: 1. 他のハンドラーの出力 (最初に計算される他の属性) に依存するハンドラーがいくつかあります。

提案された解決策: ここで CoR (責任の連鎖パターン) を使用することを考えていました。私のアイデアは、相互の出力に依存するハンドラーにのみ CoR を使用することでした。他のハンドラーを個別に呼び出します。

完了させるための他のパタ​​ーンまたはより良い方法はありますか?

将来的にこれらのハンドラーを並行して実行する可能性があるため、CoR 全体を使用したくありませんが、ここで CoR パターンを使用する場合は不可能です。

問題をさらに検討したところ、複数のハンドラーに依存している可能性があることがわかりました。問題: 1. 各ハンドラーは、複数のハンドラーの出力に依存する可能性があります (他の属性が最初に計算されます)。-私が考えることができる解決策は、「完了」と「保留中」の 2 つのバケットを使用することです。ハンドラが実行されない限り、保留中のバケットからハンドラを実行し続けます。

この問題を解決する方法はありますか?