原理
请求顺着责任链顺序执行,直到有一个节点处理了请求,或者没有任何节点处理请求。
上面说的是纯责任链,还有一种是不纯责任链,某个节点处理一部分,剩下的交给后面节点处理。
优点
- 解耦
- 添加、删除节点灵活
应用场景
某员工请假,需要项目经理、部门经理、总经理审批,每一级拥有的审批天数额度不同,需要先项目经理审批,请假天数超过审批权限时,交给部门经理审批,如果超出部门经理审批权限,则最后由总经理审批。
上代码
/**
 * 抽象处理者
 */
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)
