Java責任連鎖パターン定義と用法分析


本論文の実例は、Java責任連鎖パターンの定義と使用法を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
要求を処理する機会を多くのオブジェクトに与え、要求の送信者と受信者との間の結合関係を回避する。これらのオブジェクトをチェーンに接続し、このチェーンに沿って要求を伝達し、オブジェクトがあるまで処理する。
責任連鎖のモードは主に以下のいくつかの役を含みます。
1、処理者:処理者はインターフェースであり、具体的な処理者がユーザ要求を処理する方法及び具体的な処理者が後継の処理対象を設定する方法を担当する。
具体的な処理者:具体的な処理者は、処理インターフェースのクラスを実現する例であり、具体的な処理者は、処理インターフェースによって規定された方法を呼び出してユーザの要求を処理する。ユーザの要求を受けた後、処理者はインターフェースによって規定された方法を呼び出し、この方法を実行するプロセスの中で、ユーザの要求を処理できることが発見されたら、ユーザの要求を処理する。処理ができないと発見したら次の処理者に任せます。
例えば図書検索のプログラムは、図書の種類によってN種類に分けられ、いくつかの種類のオブジェクトを作成し、各オブジェクトが一つの種類を検索します。これらのオブジェクトをよりよく管理するために、このオブジェクトを責任連鎖に組織することができ、ユーザーが書籍を鑑定する必要がある場合、システムは責任連鎖上の最初のオブジェクトにユーザーの要求を処理させることができ、このオブジェクトはまず自分がユーザの要求を処理できるかどうかを検索し、処理ができればフィードバックして処理内容に戻る。処理できない場合は次の処理対象に任せます。

package org.zhy.design.demo;
/**
 *     
 * @author zhengyi
 *
 */
public interface Handler {
  //    ID    
  public abstract void Search(int id);
  //                    
  public abstract void nextHandler(Handler han);
}


package org.zhy.design.demo;
import java.util.ArrayList;
import java.util.List;
/**
 *         
 * @author zhengyi
 *
 */
public class WenXue implements Handler{
  private Handler han;//      
  private List<Integer> list; //          
  public WenXue(){
    list=new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
  }
  @Override
  public void nextHandler(Handler han) {
    this.han=han; //         
  }
  @Override
  public void Search(int id) {
    if(list.contains(id)){ //  list      ID   ,       
      System.out.println("   ,           ");
    }else{ //                    
      if(han!=null){
        han.Search(id);
      }
    }
  }
}


package org.zhy.design.demo;
import java.util.ArrayList;
import java.util.List;
/**
 *        
 * @author zhengyi
 *
 */
public class JiSuanJi implements Handler {
  private Handler han;
  private List<Integer> list;
  public JiSuanJi(){
    list=new ArrayList<Integer>();
    list.add(6);
    list.add(7);
    list.add(8);
    list.add(9);
    list.add(10);
  }
  @Override
  public void nextHandler(Handler han) {
    this.han=han;
  }
  @Override
  public void Search(int id) {
    if(list.contains(id)){
      System.out.println("   ,        ");
    }else{
      if(han!=null){
        han.Search(id);
      }
    }
  }
}


package org.zhy.design.demo;
public class Appliction {
  private Handler jisuanji,wenxue;
  public void createHandler(){
    jisuanji=new JiSuanJi();
    wenxue=new WenXue();
    jisuanji.nextHandler(wenxue); //        
  }
  public void search(int id){
    jisuanji.Search(id); //            
  }
  public static void main(String[] args) {
    Appliction app=new Appliction();
    app.createHandler();
    app.search(10);
  }
}

責任連鎖モードの使用に適している場合
1、多くのオブジェクトがユーザ要求を処理できる場合
2、ユーザーが明確な処理者を必要としないことを望む場合、同時に複数の処理者に要求を送信する。
3、プログラムは、ユーザー要求のセットオブジェクトを動的にカスタマイズしたいです。
もっと多くのjava関連の内容に興味がある読者は当駅のテーマを見ることができます。「Javaデータ構造とアルゴリズム教程」、「Java操作DOMノード技術のまとめ」、「Javaファイルとディレクトリの操作テクニックのまとめ」、「Javaキャッシュ操作テクニックのまとめ
本論文で述べたように、皆さんのjavaプログラムの設計に役に立ちます。