Java デザイン パターン プログラミングにおける責任連鎖パターンの使用例

高洛峰
リリース: 2017-01-19 16:59:39
オリジナル
1159 人が閲覧しました

責任連鎖モデル: 複数のオブジェクトは、対応するオブジェクトの参照によってチェーンに接続され、チェーン上の受信オブジェクトがリクエストを処理するまで、リクエストはこのチェーン上で渡されます。要求元のクライアントは、チェーン内の誰が最終的に要求を処理するのかを知らないため、システムはクライアントに影響を与えることなく動的に責任を再編成し、割り当てることができるため、要求の送信者と要求ハンドラーの間の結合を回避できます。
責任の連鎖には 3 つの役割が関係しています:
1、抽象的な処理者の役割
2、具体的な処理者の役割
3、リクエスト送信者
小さな例: 家を購入したいとします。家を買うには、交渉する必要があります。異なるポジションには異なる優先価格があり、異なるポジションがリクエストを処理するためのチェーンを形成する可能性があります。 * 草の根営業員は 3% 割引のみ * 営業マネージャー: 5% 割引 * 営業ディレクター: 8% 割引 * 上司 (ボス): 10% 割引

Java の例
クラス図:

Java デザイン パターン プログラミングにおける責任連鎖パターンの使用例

/** 
 * 抽象责任 
 */
public abstract class IFilter { 
  private IFilter successor; 
  
  public IFilter getSuccessor() { 
    return successor; 
  } 
  
  public void setSuccessor(IFilter successor) { 
    this.successor = successor; 
  } 
    
  public abstract void handleFilter(); 
    
  public abstract void handleFilter2(); 
}
ログイン後にコピー
/** 
 * 具体责任 
 */
public class ConcreteFilter extends IFilter { 
    
  private String name; 
  public ConcreteFilter(String name) { 
    this.name = name; 
  } 
    
  @Override
  public void handleFilter() { 
    /* 
     * 自己先处理,如有后继者,再由它处理一次 
     */ 
    System.out.println(name + " 处理了请求"); 
    if (getSuccessor() != null) { 
      getSuccessor().handleFilter(); 
    } 
  } 
    
  @Override 
  public void handleFilter2() { 
    /* 
     * 有后继者就后继者处理, 否则自己处理 
     */
    if (getSuccessor() != null) { 
      getSuccessor().handleFilter2(); 
    } else { 
      System.out.println(name + " 处理了请求"); 
    } 
  } 
}
ログイン後にコピー
public class Test { 
  public static void main(String[] args) { 
    IFilter filter1 = new ConcreteFilter("permission-filter");//权限过滤 
    IFilter filter2 = new ConcreteFilter("suffix-filter");//后缀名过滤 
    IFilter filter3 = new ConcreteFilter("style-filter");//风格过滤 
    filter1.setSuccessor(filter2); 
    filter2.setSuccessor(filter3); 
    System.out.println("------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------"); 
    filter1.handleFilter(); 
      
    System.out.println("------以下是交由最后一个后继者处理------"); 
    filter1.handleFilter2(); 
      
  } 
}
ログイン後にコピー

印刷:

------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------ 
permission-filter 处理了请求 
suffix-filter 处理了请求 
style-filter 处理了请求 
------以下是交由最后一个后继者处理------ 
style-filter 处理了请求
ログイン後にコピー

Java デザイン パターン プログラミングにおける責任連鎖パターンの使用例については、PHP 中国語 Web サイトの関連記事に注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート