デザインパターン10責任連鎖パターン

バックグラウンド

出張で払い戻しが必要な場合は、このようなシナリオがあります。払い戻しフォームの承認者は、プロジェクトマネージャー、部門ディレクター、部門長、および財務責任者です。もちろん、各承認者の名前、電話番号、オフィスの住所、その他の情報を知っている必要はありません。承認のためにこれらの承認者に1つずつ行く必要はありません。

一般的な解決策は、承認リクエストを開始し、プロジェクトマネージャーが承認後に部門長に提出し、部門長が承認後に部門長に提出し、部門の担当者が承認のために財務担当者に提出することです。このように、リクエストを開始するだけで、その後の承認について心配する必要はありません。

責任の連鎖モデルとは

「「

複数のオブジェクトにリクエストを処理する機会を与えることで、リクエストの送信者と受信者を結合しないようにします。受信オブジェクトをチェーンし、オブジェクトが処理するまでチェーンに沿ってリクエストを渡します。( 、したがって、要求の送信者と受信者の間の結合関係を回避します。これらのオブジェクトをチェーンに接続し、処理するオブジェクトができるまで、このチェーンに沿って要求を渡します。)

責任連鎖モデルには明らかな利点があります。これにより、要求オブジェクトと処理オブジェクト間の結合が減少し、処理オブジェクトの拡張が容易になり、処理オブジェクトを割り当てる柔軟性が向上します。

責任の連鎖により、オブジェクト間の接続が簡素化されます。各オブジェクトは、後続のプロセッサへの参照を維持するだけでよく、他のすべてのプロセッサへの参照を維持する必要はありません。これにより、多数のifまたはif ... elseステートメントの使用が回避されます。

チェーン構造

責任連鎖モデルは、主に次の3つの要素で構成されています。

「「
  • 抽象ハンドラー(ハンドラー)の役割:抽象処理メソッドと後続の接続を含む、要求を処理するためのインターフェースを定義します。

  • 具体的なハンドラーの役割:抽象ハンドラーの処理方法を実装し、要求を処理できるかどうかを判断し、要求を処理できる場合は処理されます。それ以外の場合、要求は後続に転送されます。

  • クライアントの役割:処理チェーンを作成し、チェーンの先頭にある特定のハンドラーオブジェクトに要求を送信します。処理の詳細や要求の配信プロセスは考慮されません。

構造図は次のとおりです。

責任連鎖構造図

コード

ハンドラ

要求を処理するための抽象メソッドを持つ抽象実行クラスを定義します。

ConcreteHandler1

Handler同様に、この実装クラスを拡張できConcreteHandler2ます。

テストコードは次のとおりです。

試験結果:

具体处理者2负责处理该请求!

責任連鎖モデルに関する見解

では、責任連鎖モデルを適切に使用する必要があるのはいつですか?

一般に、複数のオブジェクトが要求を処理する場合、どのオブジェクトを使用する必要があるかは、実際の呼び出しによって決定されます。このシナリオでは、発信者モードを使用できます。

管理システムを開発したことがありますか?プロセス承認機能を開発したことがありますか?この点で、責任連鎖モデルを使用できるかどうかを考えることができます。

また、注文システムでは、このデザインパターンを注文ステータス処理に使用する方が良いですか?

ただし、オブジェクトでは再帰メソッドが使用されていることに注意してください。リンクが長い場合、システムのパフォーマンスに一定の影響があります。したがって、責任連鎖モードを使用するには、リンクの長さを制御する必要があります。たとえば、Handlerでノードの最大数を設定します。ノードの数がこの最大数を超える場合、リンクの確立は許可されません。

責任連鎖モードでは、各実装クラスは独自のビジネスロジックに注意を払うだけでよく、自分で処理する必要があるものについては、親クラスに決定させる、つまり親クラスがリクエスト送信の機能を実現し、子クラス実装要求の処理は単一責任の原則に準拠しており、各実装クラスは1つのアクションまたはロジックのみを完了します。

責任の連鎖モデルは、ノードを適切に拡張できます。これは、償還承認システムの開発などのシナリオです。最初は、プロジェクトマネージャーが償還する限り、開発したばかりです。ただし、実際には、返済額が多すぎて、プロジェクトマネージャーがマスターになれないため、部門マネージャーが返済を求められます。責任チェーンモデルを使用すると、最初のプロセッサの背後に部門マネージャーの新しいノードを確立できます。実際に電話をかけるときは、部門長のノードを選択するだけです。

ご覧のとおり、この拡張方法は、要件の変更の問題を非常にうまく解決します。

過去に推奨

QRコードをスキャンして、よりエキサイティングになります。または、WeChatLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。

おすすめ

転載: blog.csdn.net/wujialv/article/details/109193591