责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
一 、 概述
责任链模式是使用多个对象处理用户请求的成熟模式,责任链模式的关键是将用户的请求分派给许多对象,这些对象被组织成一个责任链,即每个对象含有后继对象的引用,并要求责任链上的每个对象,如果能处理用户的请求,就做出处理,不再将用户的请求传递给责任链上的下一个对象;如果不能处理用户的请求,就必须将用户的请求传递给责任链上的下一个对象。二、责任链模式的结构与使用
模式的结构中包括两种角色:
1.处理者(Handler): Handler.java
public interface Handler{
public abstract void handleRequest(String number);
public abstract void setNextHandler(Handler handler);
}
2.具体处理者(ConcreteHandler)_1: Beijing.java
import java.util.*;
public class Beijing implements Handler{
private Handler handler;
private ArrayList<String> numberList;
Beijing(){
numberList=new ArrayList<String>();
numberList.add("11129812340930034");
numberList.add("10120810340930632");
numberList.add("22029812340930034");
numberList.add("32620810340930632");
}
public void handleRequest(String number){
if(numberList.contains(number))
System.out.println("该人在北京居住");
else{
System.out.println("该人不在北京居住");
if(handler!=null)
handler.handleRequest(number);
}
}
public void setNextHandler(Handler handler){
this.handler=handler;
}
}
2.具体处理者(ConcreteHandler)_2: Shanghai.java
import java.util.*;
public classShanghai implements Handler{
private Handler handler;
private ArrayList<String> numberList;
Shanghai(){
numberList=new ArrayList<String>();
numberList.add("34529812340930034");
numberList.add("98720810340430632");
numberList.add("36529812340930034");
numberList.add("77720810340930632");
}
public void handleRequest(String number){
if(numberList.contains(number))
System.out.println("该人在上海居住");
else{
System.out.println("该人不在上海居住");
if(handler!=null)
handler.handleRequest(number);
}
}
public void setNextHandler(Handler handler){
this.handler=handler;
}
}
2.具体处理者(ConcreteHandler)_3: Tianjin.java
import java.util.*;
public classTianjin implements Handler{
private Handler handler;
private ArrayList<String> numberList;
Tianjin(){
numberList=new ArrayList<String>();
numberList.add("10029812340930034");
numberList.add("20020810340430632");
numberList.add("30029812340930034");
numberList.add("50020810340930632");
}
public void handleRequest(String number){
if(numberList.contains(number))
System.out.println("该人在天津居住");
else{
System.out.println("该人不在天津居住");
if(handler!=null)
handler.handleRequest(number);
}
}
public void setNextHandler(Handler handler){
this.handler=handler;
}
}
3.应用 Application.java
public class Application{
private Handler beijing,shanghai,tianjin;
public void createChain(){
beijing=new Beijing();
shanghai=new Shanghai();
tianjin=new Tianjin();
beijing.setNextHandler(shanghai);
shanghai.setNextHandler(tianjin);
}
public void reponseClient(Stringnumber){
beijing.handleRequest(number);
}
public static void main(String args[]){
Application application=new Application();
application.createChain();
application.reponseClient("77720810340930632");;
}
}
三、责任链模式的优点