责任链设计模式,其实就是处理同一个请求的对象连接成一条链,请求的路径经过这条链,符合要求的就处理这个请求,不符合就接着往下面抛出,直道有人处理这条请求。


业务:比如啊,公司个人请假,三天以下就是主管审批,三天以上五天以下就是经理审批,五天以上就是总经理审批。


责任链有两种角色:

1、抽象处理者角色:定义一个处理请求接口,可以设定和返回下一个处理者。

2、具体 处理角色: 具体处理者处理请求或者请求给下家。


下面代码实现:

package com.test3;
//抽象处理类
public abstract class Handler {
private Handler nextHandler = null;
public Handler getNextHandler() {
return nextHandler;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
// 处理请求
public abstract void handleRequest(int days);
}


package com.test3;
//主观请求
public class SubjectiveHandler extends Handler{
@Override
public void handleRequest(int days) {
// TODO Auto-generated method stub
if(days < 3) {
System.out.println(" 主管审批了");
}else {
getNextHandler().handleRequest(days);;
}
}
}
package com.test3;
//经理
public class ManagerHandler extends Handler {
@Override
public void handleRequest(int days) {
// TODO Auto-generated method stub
if(days > 3) {
System.out.println(" 经理审批了");
}else {
getNextHandler().handleRequest(days);;
}
}
}
package com.test3;
//总经理审批
public class GeneralManagerHandler extends Handler{
@Override
public void handleRequest(int days) {
// TODO Auto-generated method stub
System.out.println(" 总经理审批");
}
}
package com.test3;
public class HandlerClient {
public static void main(String[] args) {
Handler handler1 = new SubjectiveHandler();
Handler handler2 = new ManagerHandler();
Handler handler3 = new GeneralManagerHandler();
//责任链
handler1.setNextHandler(handler2);
handler2.setNextHandler(handler3);
//处理
handler1.handleRequest(4);
}
}