なぜデコレータではなくチェーンオブレスポンシビリティを使用するのでしょうか? 質問する

なぜデコレータではなくチェーンオブレスポンシビリティを使用するのでしょうか? 質問する

私はただ読んでいるだけです責任の連鎖パターンと、私はそれを使用することを好むシナリオを想像するのに苦労していますデコレータ

どう思いますか? CoR にはニッチな用途がありますか?

ベストアンサー1

チェーンをいつでも切断できるという事実は、Chain of ResponsibilityパターンとDecoratorパターンの違いです。デコレータは、他のデコレータと相互作用することなく、一度にすべて実行されると考えることができます。チェーン内のリンクは、それぞれが前のリンクに依存しているため、一度に 1 つずつ実行されると考えることができます。

プログラムをリンクで構成されたチェーンとして概念化できる場合は、Chain of Responsibility パターンを使用します。各リンクはリクエストを処理するか、リクエストをチェーンに渡すことができます。

Win32 API を使用していたとき、この API が提供するフック機能を使用する必要が時々ありました。Windows メッセージのフックは、おおまかに Chain of Responsibility パターンに従います。WM_MOUSEMOVE などのメッセージをフックすると、コールバック関数が呼び出されます。コールバック関数は、チェーンの最後のリンクと考えてください。チェーン内の各リンクは、WM_MOUSEMOVE メッセージを破棄するか、チェーンの次のリンクに渡すかを決定できます。

この例で Decorator パターンが使用されていた場合、WM_MOUSEMOVE メッセージが通知されますが、他のフックがそれを処理することを防ぐことはできません。

Chain of Command パターンが使用されるもう 1 つの場所は、ゲーム エンジンです。ここでも、エンジン関数、イベント、その他のものをフックできます。ゲーム エンジンの場合、単に機能を追加するだけでは不十分です。機能を追加して、ゲーム エンジンがデフォルトのアクションを実行しないようにする必要があります。

おすすめ記事