所谓责任链模式,就是我有一个任务,那么这个任务需要不同的处理器进行处理,一个个的传下去,其中每一个处理器被称为一个节点。负责具体的东西。比如拦截器对请求的处理,不同的拦截器需要处理的内容不一样,就相当于责任不一样。比如生活中常见的请假,就需要人事,经理,老板审批,每个人审批的内容不一样。下面做一个简单的demo.
责任抽象类
/**
* 责任链抽象类
*/
public abstract class Handler {
public Handler nextHandler;
/**
* 设置下一个处理对象
* @param nextHandler
*/
public void setNextHandler(Handler nextHandler){
this.nextHandler=nextHandler;
}
/**
* 交给下个处理对象
* @param request
*/
public void nextHandler(Request request){
this.nextHandler.handleRequest(request);
}
/**
* 交给不同的处理器
* @param request
*/
public abstract void handleRequest(Request request);
}
具体实现类
public class HRHandler extends Handler{
@Override
public void handleRequest(Request request) {
System.out.println("我是人事,我已经处理完成");
//交给下一位
this.nextHandler(request);
}
}
public class MHandler extends Handler {
@Override
public void handleRequest(Request request) {
System.out.println("我是经理,我已经处理完成");
this.nextHandler(request);
}
}
public class BossHandler extends Handler {
@Override
public void handleRequest(Request request) {
System.out.println("我是老板,我已经处理完成");
}
}
请求类
public class Request {
private Integer day;
public Request(Integer day) {
this.day=day;
}
}
测试类
public class ChainTest {
public static void main(String[] args) {
Request request = new Request(3);
Handler bossHandler = new BossHandler();
Handler mHandler = new MHandler();
Handler hrHandler = new HRHandler();
hrHandler.setNextHandler(mHandler);
mHandler.setNextHandler(bossHandler);
hrHandler.handleRequest(request);
}
}
结果
我是人事,我已经处理完成
我是经理,我已经处理完成
我是老板,我已经处理完成