<span style="font-size:18px;">/**
* 处理者(Handler)
* @author zhenyonghe
*责任链模式
*使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合
*关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
*/
public interface Handler {
public void handleRequest(String number);
public void setNextHandler(Handler handler);
}</span>
<pre name="code" class="java"><span style="font-size:18px;">/**
* 具体处理者(ConcreteHandler)
* @author zhenyonghe
*
*/</span>
<span style="font-size:18px;">public class Beijing implements Handler{
private Handler handler;
private List<String>numberList;
public Beijing() {
numberList=new ArrayList<>();
numberList.add("11012345");
numberList.add("11013456");
}
@Override
public void handleRequest(String number) {
if(numberList.contains(number)){
System.out.println("该人在北京居住");
}else{
System.out.println("该人不在北京居住");
if(handler!=null){
handler.handleRequest(number);
}
}
}
@Override
public void setNextHandler(Handler handler) {
this.handler=handler;
}
}</span>
<span style="font-size:18px;">/**
* 具体处理者(ConcreteHandler)
* @author zhenyonghe
*
*/
</span>
<span style="font-size:18px;">public class Shanghai implements Handler {
private Handler handler;
private List<String> numberList;
public Shanghai() {
numberList=new ArrayList<>();
numberList.add("6661234");
numberList.add("6664567");
}
@Override
public void handleRequest(String number) {
if(numberList.contains(number)){
System.out.println("该人在上海居住");
}else{
System.out.println("该人不在上海居住");
if(handler!=null){
handler.handleRequest(number);
}
}
}
@Override
public void setNextHandler(Handler handler) {
this.handler=handler;
}
}</span>
<span style="font-size:18px;">/**
*
* @author zhenyonghe
*用户提交一个人的身份证号码,想知道该人是在北京或者上海居住。
*/
public class App {
private Handler beijing,shanghai;
public void createCHain(){
beijing=new Beijing();
shanghai=new Shanghai();
beijing.setNextHandler(shanghai);
}
public void reponseClient(String number){
beijing.handleRequest(number);
}
public static void main(String[] args) {
App app=new App();
app.createCHain();
app.reponseClient("6664567");
app.reponseClient("11012345");
app.reponseClient("78928933");
}
}
/*
• 责任链中的对象只和自己的后继是低耦合关系,和其他对象毫无关联,这
使得编写处理者对象以及创建责任链变得非常容易。
• 使用责任链的用户不必知道处理者的信息,用户不会知道到底是哪个对象
处理了它的请求。
*/
</span>