责任链模式的官方定义:很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
责任链模式的角色:
1.Handler:抽象处理者,定义出一个处理请求的接口。
2.ConcreteHandler:具体处理者,具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。
3.Request:抽象请求者,定义请求接口。
4.ConcreteRequest:具体请求者,继承抽象请求,实现具体的请求。
Handler(抽象处理者)
package com.exanple.command;
/**
* 抽象处理者
* @author zeng
*
*/
public abstract class Handler {
Handler nextHandler;
public void handleRequest(Request request){
if (request.getHandlerLevel() == getHandlerLevel()) {
handle(request);
}else {
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
public abstract int getHandlerLevel();
public abstract void handle(Request request);
}
具体处理者一
package com.exanple.command;
public class ConcoreteHandler01 extends Handler{
@Override
public int getHandlerLevel() {
return 1;
}
@Override
public void handle(Request request) {
System.out.println("处理请求: " + request.getHandlerLevel());
}
}
具体处理者二
package com.exanple.command;
public class ConcoreteHandler02 extends Handler{
@Override
public int getHandlerLevel() {
return 2;
}
@Override
public void handle(Request request) {
System.out.println("处理请求: " + request.getHandlerLevel());
}
}
具体处理者三
package com.exanple.command;
public class ConcoreteHandler03 extends Handler{
@Override
public int getHandlerLevel() {
return 3;
}
@Override
public void handle(Request request) {
System.out.println("处理请求: " + request.getHandlerLevel());
}
}
抽象请求者
package com.exanple.command;
public abstract class Request {
public abstract int getHandlerLevel();
}
具体请求者
package com.exanple.command;
public class ConcoreteRequest extends Request{
@Override
public int getHandlerLevel() {
return 2;
}
}
客户类
package com.exanple.command;
public class Client {
public static void main(String[] args) {
Handler handler01 = new ConcoreteHandler01();
Handler handler02 = new ConcoreteHandler02();
Handler handler03 = new ConcoreteHandler03();
handler01.nextHandler = handler02;
handler02.nextHandler = handler03;
Request request = new ConcoreteRequest();
//第一个处理者开始分发请求
handler01.handleRequest(request);
}
}