定义
使多个对象才有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.
优点
将请求和处理分开.请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,两者解耦,提高系统的灵活性
缺点
- 性能问题,链越长,性能差.
- 调试不方便
通用代码
框架代码
public class Level {
}
public class Request {
public Level getRequestLevel(){
return null;
}
}
public class Response {
}
抽象处理者
public abstract class Handler {
private Handler nextHandler;
public final Response handleMessage(Request request){
Response response = null;
if (getHandlerLevel().equals(request.getRequestLevel())) {
response = echo(request);
} else {
if (nextHandler != null) {
response = nextHandler.handleMessage(request);
}else {
//没有处理者处理逻辑
}
}
return response;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
protected abstract Level getHandlerLevel();
protected abstract Response echo(Request request);
}
具体处理者
public class ConcreteHandler1 extends Handler {
@Override
protected Level getHandlerLevel() {
return null;
}
@Override
protected Response echo(Request request) {
return null;
}
}
public class ConcreteHandler2 extends Handler {
@Override
protected Level getHandlerLevel() {
return null;
}
@Override
protected Response echo(Request request) {
return null;
}
}