在系统中如果存在多个对象可以处理同一请求,则可以通过责任链模式将这些处理请求的对象连成一条链,让请求沿着该链进行传递。如果链上的对象可以处理该请求则进行处理,否则将请求转发给下一个对象来处理。
责任链模式的定义:避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。
责任链模式的结构和实现:
1.Handler(抽象处理者):定义了一个处理请求的接口,且每一个处理者的下家也是处理者,所以在抽象处理者类中定义了一个抽象处理者对象作为其对下一个处理者的引用,通过该引用形成一条链。
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handlerRequest(String request);
}
2.ConcreteHandler(具体处理者):它是抽象处理者的子类,可以处理用户的请求,在具体处理类中实现了抽象处理者中定义的抽象请求处理方法,在处理前需要判断,满足条件则处理,否则向下传递请求。
public class ConcreteHandler extends Handler {
@Override
public void handlerRequest(String request) {
if("条件满足".equals(request)) {
System.out.println(request+"处理业务!");
}else {
this.successor.handlerRequest(request);
}
}
}
public class ConcreteHandlerA extends Handler {
@Override
public void handlerRequest(String request) {
if("条件满足".equals(request)) {
System.out.println(request+"处理业务!");
}else {
this.successor.handlerRequest(request);
}
}
}
3.Test:
public class Test {
public static void main(String[] args) {
Handler handlerA, handler;
handler = new ConcreteHandler();
handlerA = new ConcreteHandlerA();
handler.setSuccessor(handlerA);
handler.handlerRequest("条件满足");
}
}