目录
1.简介
通过将这些对象连成一条链,并沿着这条链传递该请求,直到所有对象处理它为止。这样每个对象都会有机会处理请求,从而也就避免了请求的发送者和接收者之间的耦合关系。
2.优点
将请求和处理分开,两者解耦,提高系统的灵活性。
3.缺点
当链较长时,常常会引发两个问题。性能问题和调试问题,每个请求都从头遍历到尾,可想而知。
4.形式
抽象处理类
public abstract class AHandler {
private AHandler nextHandler;
public final Response handleMessage(Request request) {
Response response = null;
if(this.getHandlerLevel().equals(request.getRequestLevel())) {
response = this.echo(request);
}else {
if(this.nextHandler != null) {
response = this.nextHandler.handlerMessage(request);
}else {
System.out.prontln("没有后继处理者,另行处理");
}
}
return response;
}
public void setNext(AHandler _handler) {
this.nextHandler = _handler;
}
protected abstract Level getHandlerLevel();
protected abstract Response echo(Request request);
}
具体处理类
public class Handler1 extends AHandler {
protected Response echo(Request request) {
System.out.println("完成处理逻辑");
return null;
}
protected Level getHandlerLevel() {
System.out.println("设置处理级别");
return null;
}
}
public class Handler2 extends AHandler {
protected Response echo(Request request) {
System.out.println("完成处理逻辑");
return null;
}
protected Level getHandlerLevel() {
System.out.println("设置处理级别");
return null;
}
}
public class Handler3 extends AHandler {
protected Response echo(Request request) {
System.out.println("完成处理逻辑");
return null;
}
protected Level getHandlerLevel() {
System.out.println("设置处理级别");
return null;
}
}
级别类
public class Level {
System.out.println("请求和处理级别");
}
请求类
public class Request {
System.out.println("封装请求");
public Level getRequestLevel() {
System.out.println("获取请求级别");
return null;
}
}
回复类
public class Response {
Sytem.out.println("封装返回的结果");
}
测试类
public class Test {
public static void main(String[] args) {
AHandler handler1 = new Handler1();
AHandler handler2 = new Handler2();
AHandler handler3 = new Handler3();
handler1.setNext(handler2);
handler2.setNext(handler3);
Reponse reponse = handler1.handlerMessage(new Request());
}
}