原理
请求顺着责任链顺序执行,直到有一个节点处理了请求,或者没有任何节点处理请求。
上面说的是纯责任链,还有一种是不纯责任链,某个节点处理一部分,剩下的交给后面节点处理。
优点
- 解耦
- 添加、删除节点灵活
应用场景
某员工请假,需要项目经理、部门经理、总经理审批,每一级拥有的审批天数额度不同,需要先项目经理审批,请假天数超过审批权限时,交给部门经理审批,如果超出部门经理审批权限,则最后由总经理审批。
上代码
/**
* 抽象处理者
*/
public abstract class Handler {
// 项目经理额度天数1天
protected double PMDays = 1;
// 部门经理额度天数3天
protected double BMDays = 3;
// 总经理额度天数5天
protected double GMDays = 5;
// 领导名
private String leaderName;
// 下一个处理者
private Handler handler;
public Handler(String leaderName) {
this.leaderName = leaderName;
}
public String getLeaderName() {
return this.leaderName;
}
public void setNextHandler(Handler handler) {
this.handler = handler;
}
public Handler getNextHandler() {
return this.handler;
}
/**
* 定义抽象处理方法
*
* @param leaveDays
*/
public abstract void handleRequest(double leaveDays);
}
复制代码
/**
* 项目经理处理者
*/
public class PMHandler extends Handler {
public PMHandler(String leaderName) {
super(leaderName);
}
@Override
public void handleRequest(double leaveDays) {
if (leaveDays <= PMDays) {
System.out.println("你只请了" + leaveDays + "天的假期," + getLeaderName() + "说:准了!!!");
} else {
getNextHandler().handleRequest(leaveDays);
}
}
}
复制代码
/**
* 部门经理处理者
*/
public class BMHandler extends Handler {
public BMHandler(String leaderName) {
super(leaderName);
}
@Override
public void handleRequest(double leaveDays) {
if (leaveDays <= BMDays) {
System.out.println("你只请了" + leaveDays + "天的假期," + getLeaderName() + "说:准了!!!");
} else {
getNextHandler().handleRequest(leaveDays);
}
}
}
复制代码
/**
* 总经理处理者
*/
public class GMHandler extends Handler {
public GMHandler(String leaderName) {
super(leaderName);
}
@Override
public void handleRequest(double leaveDays) {
if (leaveDays <= GMDays) {
System.out.println("你只请了" + leaveDays + "天的假期," + getLeaderName() + "说:准了!!!");
} else {
System.out.println("你请的天数过长,超出公司允许范畴,予以驳回!!!");
}
}
}
复制代码
public class Context {
public static void main(String[] args) {
PMHandler pmHandler = new PMHandler("项目经理");
BMHandler bmHandler = new BMHandler("部门经理");
GMHandler gmHandler = new GMHandler("总经理");
bmHandler.setNextHandler(gmHandler);
pmHandler.setNextHandler(bmHandler);
pmHandler.handleRequest(0.5);
}
}
复制代码
结果:
你只请了0.5天的假期,项目经理说:准了!!!
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)