概念
将有机会处理同一请求的对象连成一条链,沿着这条链传递这个请求,直到对象处理它为止
使用场景
多个对象可以处理同一请求,但具体哪个对象处理则在运行时动态决定
实现方式
- Handler ——抽象处理者 :包括拦截处理请求的方法(handleRequest),拦截后真正处理请求的方法(handle),和下一个处理节点对象的引用字段(nextHandler),本处理者的等级字段(handlerLevel)
- Handler1,Handler2——具体处理者。需要设置等级,下一个节点对象字段,实现handle方法
- Request—— 抽象请求者,包含处理对象和处理等级
- Request1,Request2 —— 具体请求者
public abstract class Handler{
protected Handler nextHandler;
public final void handleRequest(Request req){
if(getHandlerLevel() == req.requestLevel){
handle(req);
} else {
if(nextHandler != null){
nextHandler.handleRequest(req);
} else {
System.out.println("all the handle cannot handle the request");
}
}
}
protected abstract int getHandlerLevel();
protected abstract void handle(Request req);
}
public class Handler1 extends Handler {
@Override
protected int getHandlerLevel(){
return 1;
}
@Override
protected void handle (Request req){
System.out.println("handler1 handle the request");
}
}
public class Handler2 extends Handler {
@Override
protected int getHandlerLevel(){
return 2;
}
@Override
protected void handle (Request req){
System.out.println("handler2 handle the request");
}
}
public class Handler3 extends Handler {
@Override
protected int getHandlerLevel(){
return 3;
}
@Override
protected void handle (Request req){
System.out.println("handler3 handle the request");
}
}
public abstract class Request {
private Object obj; //处理对象
public Request(Object obj){
this.obj = obj;
}
public Object getContent(){
return obj;
}
public abstract int getRequestLevel();
}
public class Request extends Request {
public Request(Object obj){
super(obj);
}
@Override
public int getRequestLevel(){
return 1;
}
}
public class Request2 extends Request {
public Request(Object obj){
super(obj);
}
@Override
public int getRequestLevel(){
return 2;
}
}
public class Client{
public static void main(String[] args){
Handler h1 = new Handler1();
Handler h2 = new Handler2();
Handler h3 = new Handler3();
h1.nextHandler = h2;
h2.nextHandler = h3;
Request req = new Request2("Request2");
h1.handleRequest(req);
}
}