将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。
代码简单实现
abstract class Handler {
# 指向下一个处理器
private Handler next;
public Handler getNext() {
return next;
}
public void setNext(Handler next) {
this.next = next;
}
public abstract void handle(String request);
}
class AuthHandler extends Handler {
@Override
public void handle(String request) {
if ("admin".equals(request)){
if (getNext() == null){
System.out.println("无人处理此请求");
}
else {
//把请求传给下一个handler
getNext().handle(request);
}
}
else {
System.out.println("无权访问, 程序执行结束");
}
}
}
class AHandler extends Handler {
@Override
public void handle(String request) {
System.out.println("AHandler处理了请求 : " + request);
}
}
class HandlerTest {
public static void main(String[] args) {
Handler authHandler = new AuthHandler();
Handler aHandler = new AHandler();
authHandler.setNext(aHandler);
authHandler.handle("admin");
}
}
应用场景
- Servlet Filter
- Nettty ChannelHandler