責任チェーンパターン:複数のオブジェクトは、オブジェクトの次のホームに対応する参照によってチェーンに接続され、チェーンの受信オブジェクトがリクエストを処理するまでこのチェーンにリクエストが渡されます。リクエストクライアントは、誰が最終的にチェーンのリクエストを処理するかを知らないため、システムはクライアントに影響を与えることなく動的に責任を再編成および割り当てることができ、それによりリクエスト送信者とリクエストハンドラーの間の結合を避けます。
責任の連鎖には3つの役割があります。
1。抽象プロセッサの役割
2。特定のハンドラーの役割
3。リクエスト送信者の小さな例:家を買いに行くと、家を買うときに交渉する必要があるとします。家を売る人の位置は異なり、割引価格も異なります。さまざまなポジションが、リクエストを処理するためのチェーンを形成できます。暫定的に設定: *草の根営業担当者は3%の割引しか提供できません *セールスマネージャー:5%割引 *セールスディレクター:8%割引 *ボス:10%割引
Javaインスタンス
クラス図:
/ ***抽象責任*/パブリックアブストラクトクラスifilter {private ifilter後継者; public ifilter getsuccessor(){return chucker; } public void setSuccessor(ifilter後継者){this.successor =後継者; } public Abstract void handlefilter(); public abstract void handlefilter2(); } / ***特定の責任*/パブリッククラスConcreteFilter拡張ifilter {private string name; public concretefilter(string name){this.name = name; } @Override public void handleFilter(){ / * *最初に処理します。後継者がいる場合は、1回 * / system.out.println(name + "request processed"); if(getsuccesser()!= null){getsuccessor()。handlefilter(); }} @Override public void handlefilter2(){ / * *後継者がいる場合、後継者は自分で処理されます。それ以外の場合は、自分で処理します*/ if(getSuccesser()!= null){getSuccesser()。handlefilter2(); } else {system.out.println(name + "request processed"); }}} public class test {public static void main(string [] args){ifilter filter1 = new concretefilter( "Permission-filter"); // Permission Filter ifilter filter2 = new ConcreteFilter( "Suffix-filter"); filter2.setsuccessor(filter3); System.out.println( "------以下はすべてのプロセッサ(後継者を含む)によって処理されます。注文はレベルごとのパスです------"); filter1.handlefilter(); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------印刷:
------以下は各プロセッサ(後継者を含む)のプロセスであり、注文は次々とレベルです。 successor---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------