为避免请求发送者与多个请求处理者耦合在一起,将所有的请求处理者通过前一对象记住下一个对象的引用而产生一条链,当有请求发生时,可将请求沿着这条链传递,直到有对象处理他为止
/**
* 描述:
* 抽象处理者角色
*
* @author lars
* @date 2019/7/12 17:52
*/
public abstract class Handler {
private Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public Handler getNextHandler() {
return nextHandler;
}
public abstract void handleRequest(String request);
}
/**
* 描述:
* 具体处理者角色A
*
* @author lars
* @date 2019/7/12 17:54
*/
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(String request) {
if (request.equals("A")){
System.out.println("具体处理者角色A处理该请求");
}else {
if (Objects.isNull(super.getNextHandler())){
System.out.println("孤儿请求,无人接收");
}else {
super.getNextHandler().handleRequest(request);
}
}
}
}
/**
* 描述:
* 具体处理者角色B
*
* @author lars
* @date 2019/7/12 17:54
*/
public class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(String request) {
if (request.equals("B")){
System.out.println("具体处理者角色B处理该请求");
}else {
if (Objects.isNull(super.getNextHandler())){
System.out.println("孤儿请求,无人接收");
}else {
super.getNextHandler().handleRequest(request);
}
}
}
}
/**
* 描述: 客户端角色
*
* @author lars
* @date 2019/7/12 17:58
*/
public class Client {
public static void main(String[] args) {
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setNextHandler(handlerB);
handlerA.handleRequest("B");
handlerA.handleRequest("C");
}
}