定義:責任のチェーンパターンは、リクエストのレシーバーオブジェクトのチェーンを作成します。このパターンは、リクエストのタイプを提供し、リクエストの送信者と受信者を切り離します。このタイプのデザインパターンは、行動パターンに属します。このモードでは、通常、各受信者には別の受信者への参照が含まれています。オブジェクトがリクエストを処理できない場合、同じリクエストを次のレシーバーに渡します。
機能: 1。結合度を削減します。リクエストの送信者と受信者を切り離します。
2。オブジェクトを簡素化しました。これにより、チェーンの構造を知るためにオブジェクトが必要ではありません。
3。責任をターゲットに割り当てる柔軟性を強化します。チェーン内のメンバーを変更するか、注文を動員することにより、動的な追加または責任の削除が可能になります。
4.新しい要求処理クラスを追加すると非常に便利です。
エンタープライズレベルの開発と一般的に使用されるフレームワークのアプリケーション:春、ストラットインターセプター、サーブレットフィルター
具体的な例:
/** *ここに会社の休暇の例があります: * 1。誰かが休暇を取る(イベント) *2。プロジェクトチームリーダーの承認:承認は3日未満で承認され、3日以上上司を要求します*3。部門の監督者の承認:承認は10日以内に承認され、10日以上上司を要求*4。ゼネラルマネージャーの承認:承認は30日未満で承認でき、30日以上承認されません*/public class demo {public static void main(string [] args){event event = new event( "programmer"、32、 "hometownに戻って親relativeを訪問する");リーダーa = new Groupleader( "Zhang San");リーダーB =新しいマネージャー( "li si");リーダーC = new GeneralManager( "Wang Wu"); //責任チェーンモードを指定しますa.setnextleader(b); B.SetNextLeader(c); A.ハンドラー(イベント); }}/***イベントオブジェクト、責任チェーン内の特定の処理イベント*プライベートイントデイズ;プライベートストリングの理由;パブリックイベント(文字列名、int日、文字列理由){super(); this.name = name; this.days = days; this.Reason = Reason; } public string getname(){return name; } public void setName(string name){this.name = name; } public int getDays(){return days; } public void setdays(int days){this.days = days; } public string getReason(){return理由; } public void setReason(String reason){this.Reason = Reason; }}/***抽象的な責任チェーンオブジェクト、次のすべての実際の責任チェーンオブジェクトは、このオブジェクトから継承されます*/abststract class Leader {private string name;保護されたリーダーNextLeader; //責任の連鎖における次の責任オブジェクト、これは責任の連鎖を維持するための基礎です(String name){super(); this.name = name; } public void setNextLeader(リーダーNextLeader){this.nextleader = nextleader; } public string getname(){return name; } public void setName(string name){this.name = name; }保護された要約voidハンドラー(イベントイベント);}/***休暇プロセスの最初のオブジェクト、グループリーダー*/クラスのgroupleaderはリーダー{public groupleader(string name){super(name); }保護されたvoidハンドラー(イベントイベント){if(event.getDays()<3){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------休暇の理由: " + event.getReason() +" | "); System.out.println( "approver:"+this.getName()+"(グループリーダー)、pass!"); System.out.println(); } else {system.out.println(this.getname()+"(supervisor)、no formissions!"); this.nextleader.handler(event); }}}/***休暇プロセスの2番目のオブジェクト、部門マネージャー*/クラスマネージャーはリーダー{public Manager(string name){super(name); }保護されたvoidハンドラー(イベントイベント){if(event.getDays()<10){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println(this.getName()+"、no formessions!"); 30){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ offender: "+event.getName()+" | "); system.out.println("休暇日数: "+event.getDays()+" days "+" | "); system.out.println(" | reave of leaves: "+event.getReason()+" | "); out.println(" appopenver: "+this.getname()+"; System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The leave requester: "+event.getname()+" | "); system.out.println("+event.getDays()+"days"+"|"); system.out.println( "| event.getRain()event.getRain()+" | "); system.out.out.println "); system.out.println();}}}責任チェーンモデルは、主にプロセス制御などの開発に使用されます。 IF-ELSEモデルと比較して、コードの変更と統合の効率が高く、これはコードメンテナンスをより助長します。さらに、責任チェーンにオブジェクトを追加する必要がある場合、特定の責任チェーンクラスを実装し、責任オブジェクトを作成し、オーバーヘッドなしで責任チェーンの関係を維持する必要があります。さらに、実際の設計では、責任チェーンのメンテナンスが構成ファイルで実行されるため、開発時間を節約できます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。