問題タブ [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.
design-patterns - デザイン パターン 責任の連鎖 vs デコレーター
Chain of Responsibility パターンと Decorator パターンの違い..?
design-patterns - 責任連鎖設計パターン - regd
このパターンに関するいくつかの質問を見てきましたが、この設計パターンについてもっと深く理解しようとしています。この点に関するリソース、このパターンを使用する傾向があるシナリオと避けるべきシナリオに関する専門家の解説、およびいくつかの実例は、この点で非常に役立ちます。私はCORタイプが何であるかを探しているのではなく、専門家からの高度な解説を探しています. これは、次回このパターンをより責任を持って適用するのに大いに役立ちます。
design-patterns - 特殊化に基づいて多数のハンドラーのうち 1 つのハンドラーのみが動作するパターン
いくつかのコードを書き直して、いくつかの結合の問題を解決し、将来の変更を容易にしようとしています。
現在、状況に応じて適切な実装を選択する基本クラスに静的ファクトリ メソッドがあります。決定は、専門の程度に基づいています。
タイプ A と B はどちらもこれを処理できますが、B はこの状況のために特別に設計されており、正しい選択です。
したがって、基本クラスはすべての実装と密接に結合されており、このメソッドは、新しい特殊な実装が作成されたときに書き直す必要があります。
Chain of Responsibilityパターンを使用して、この結合を断ち切ることを考えています。ただし、最も適切な実装が確実に実行されるようにする方法がわかりません。この決定を実装に委ねると、同じ結合の問題が発生せずに特殊化の順序でクエリが実行されることを保証できません。
このような状況を処理するためのパターンや方法はありますか? (私の最善の推測では、展開を妨げるでしょう。誰もが「そうです、それがそれを行う唯一の方法です!」と言わないように、私はそれを後ろのポケットに入れておきます。)
c++ - コンストラクターFoo::FooはFooへの参照を受け取りますが、コピーコンストラクターは受け取りません
コピーできないクラスがFoo
あり、そのコンストラクターの1つがたまたまへの参照を受け取ったとしFoo
ます。
コンパイラーは、これがコピーコンストラクターであると見なしますが、コピーとはまったく関係のないことを行います(したがって、代入演算子は無効になります)。
この方法でコンストラクターを定義することに危険はありますか、またはその署名を人為的に変更する必要がありますか?たとえば、参照の代わりにポインターを使用するか、必須のダミーパラメーターを追加しますか?
ここにいくつかのコンテキストがあります(おそらく私の質問を理解/回答する必要はありません)。
自分で作成したクラスライブラリがあります。これは、ユーザーコードと別のライブラリ間の接続として機能します。もう1つのライブラリは、簡潔にするためにfrobnicateと呼ぶサービスを提供します。ユーザーコードは次のようになります。
ユーザーオブジェクトの階層をサポートしたいと思います。各オブジェクトは別の(その親)に含まれていますが、他のすべてのオブジェクトを含むいくつか(私の場合は5)のトップレベルオブジェクトがあります。
各オブジェクトにはログファイルがあります。各呼び出しを複数のログファイルに記録し、最上位オブジェクトまで包含階層を上に配置したいと思います。
私はそれをこのように実装しました:
design-patterns - 「責任の連鎖」パターンと「戦略」パターンの違いは何ですか?
数日前にSOでここで尋ねた別の質問のために、私はこの質問を提起しています。
特定の問題を解決する必要がありましたが、2 つの返信を受け取った後、2 つのパターンがその問題 (および他の同様の問題) を解決するのに役立つことに気付きました。
- 責任の連鎖
- ストラテジー
私の質問は:
これらのパターンの違いは正確には何ですか?
c# - デザインパターン:多くのメソッドが同じ最初のステップを共有する
DoThisStepFirst()
多くの方法で繰り返さないようにするのに役立つデザインパターンはありますか?
編集1:これは不自然な例です。
私の実際の実装には、パラメーターを使用したメソッドシグネチャと、各メソッドの重要な操作が含まれています。
編集2:
- @Marc Gravellは、アスペクト指向プログラミングを提案しました。はい、それはここで私を助けるかもしれません。
- また、Chain-of-Responsibilityパターンがここでも役立つかもしれないと考えています。
@チャーリー・マーティンはこのプログラムについてもっと知りたがっていました。これが私が実際にやろうとしていることです。
- ' m 'コントローラーおよび' n 'コントローラーメソッドのASP.NETMVC2アプリケーションに対して実行するテストハーネスを設定しようとしています。
- MVCアプリケーションはSessionStateと緊密に結合されています。さまざまな理由で、SessionStateをモックすることはできません。
- そのため、メソッド内で、
DoThisStepFirst()
SessionStateを初期化します。 - そして、SessionStateを初期化した後、指定されたメソッドに進みたいと思います(そのため、「Chain of Responsibility」デザインパターンを探しているのではないかと思います)。
- そのため、メソッド内で、
oop - これは引き続き責任連鎖パターンと見なされますか?
私はかなり長い間デザインパターンを使用しており、それを「責任の連鎖パターン」と呼んだり参照したりしてきましたが、今では違いがあることに気づきました。そうするのは適切ではないかもしれません。したがって、私の質問は 1、「次はこのパターンのインスタンスですか、それとも別の名前にする必要がありますか?」、および 2、「従来の方法を好む理由はありますか?」です。
ソフトウェアを開発するときは、次のパターンをよく使用します。functorを定義するインターフェースがあります。このようなものです。
これらは通常、検索、フィルタリング、または処理クラスです。通常はComparatorのようなものです。通常、実装方法は機能的です (つまり、副作用がありません)。最終的に、次のようなインターフェイスの実装を作成していることに気付きました。
常にブール値であるとは限りません-私はこのパターンを変更可能なオブジェクトでも使用しました-しかし、短絡条件が常にあります(たとえば、trueを返す、文字列が空の文字列である、フラグが設定されるなど)。
基本クラスからの継承の問題が実装の詳細であることを考慮して、これまでは一般的にこれを「責任の連鎖」パターンと呼んでいました。しかし、今日、重要な違いに気付きました。チェーンに沿ったオブジェクトは、チェーンの残りの部分を中断することはできません。実装が「これは false であり、どの条件でも false になることを保証できます」と言う方法はありません (nb: でのみ短絡true
)。
では、これは責任連鎖パターン以外の何かと呼ぶべきでしょうか? インスタンスにメッセージを渡す従来のアプローチよりもこのアプローチを使用する場合に考慮すべき懸念事項や問題はありますか。
c# - LinkedListを使用したChainofResponsibilityの実装
私はこれに頭を巻くのに苦労しています、そして誰かが私を助けてくれることを願っています。
私はChainofResponsibilityクラスを持っていますが、LinkedListクラスの派生物として実装できるかどうか(そして実装したいと思うかどうか)疑問に思っています。本質的に、Chain of Responsibilityはもちろんリンクリストですが、ここでLinkedListから派生することが本当に適切かどうかはわかりません。実装された各メソッドは、後続のメソッドで同じメソッドを呼び出すことができる必要があるためです。現在のものは失敗します。
あなたはのようなものを実装できますpublic class MyHandler : LinkedList<MyHandler>
か?これは再帰的定義のように見えますが、コンパイラーはそれを問題とは見なしません。
誰かがこれについて何か洞察を持っていますか?
java - Chain of Responsibility Logging
私はChainHandlerと呼ばれる抽象クラスとChainHandlerの多くの実装を持っています。
他のプログラマーは、そのChainHandlerの他の実装を作成します。
私のプログラムはChainofResponsibilityデザインパターンを実装しています。
ChainHandlerの具体的な実装はそれぞれ、handleメソッドを実装します。
1つのハンドラーが「a」を処理できる場合、それを処理してチェーンを停止します。そうでない場合、「a」はチェーンの最後に到達するまで次のハンドラーに渡されます。
各具象ハンドラーに、処理できたすべての「a」のリストを持たせたい。しかし、具体的なクラスの開発者に、成功時にリストに書き込むことを忘れないようにしたくありません。
それを行うためのエレガントな方法はありますか?
私の最高のアイデアは次のとおりです。
1-handleメソッドをconcreteクラスでprotectedに変更し、ブール値を返すようにして、名前をinnerhandleに変更します。
2-抽象クラスのhandleメソッドをpublicに変更すると、innerhandleが呼び出されます。成功すると、オブジェクトがリストに追加されます。