责任链模式案例

需求背景:

请你设计一个员工休假审批流程,当员工的休假天数<=1时,由直接领导审批,休假天数<=2时,分别由直接领导、一级部门领导审批,休假天数>=3时,分别由直接领导、一级部门领导、分管领导审批。

不使用责任链:

package com.shejimoshi;

public class Main {
    public static void main(String[] args) {
        RequestParam requestParam = new RequestParam("MJ", 3);
        if (requestParam.getTime()>=1){
            System.out.println("领导审批");
            if (requestParam.getTime()>=2){
                System.out.println("一级部门领导审批");
                if (requestParam.getTime()>=3){
                    System.out.println("分管领导审批");
                }
            }
        }
    }
}

使用责任链各司其职:

抽象审批类AuditHandler,包含下一个处理者的引用nextAuditHandler,通过setNextAuditHandler方法进行注入,从而形成一条链,抽象audit方法,由各个处理者的实现类去实现各自的审批逻辑。

package com.shejimoshi;

public abstract class AuditHandler {
    protected AuditHandler nextAuditHandler;

    public void setNextAuditHandler(AuditHandler nextAuditHandler) {
        this.nextAuditHandler = nextAuditHandler;
    }
    public abstract void audit(RequestParam requestParam);
}
class DirectLeaderAuditHandler extends AuditHandler{

    @Override
    public void audit(RequestParam requestParam) {
         if (requestParam.getTime()>=1){
             System.out.println("班主任审批通过");
         }
         if (nextAuditHandler != null){
             nextAuditHandler.audit(requestParam);
         }else {
             System.out.println("审批完成");
         }
    }
}
class FirstLeaderAuditHandler extends AuditHandler{

    @Override
    public void audit(RequestParam requestParam) {
         if (requestParam.getTime()>=2){
             System.out.println("学院审批通过");
         }
         if (nextAuditHandler != null){
             nextAuditHandler.audit(requestParam);
         }else {
             System.out.println("审批完成");
         }
    }
}
class FenGuanLeaderAuditHandler extends AuditHandler{
    @Override
    public void audit(RequestParam requestParam) {
         if (requestParam.getTime()>=3){
             System.out.println("学校审批通过");
         }
         if (nextAuditHandler != null){
             nextAuditHandler.audit(requestParam);
         }else {
             System.out.println("审批完成");
         }
    }
}
class Test{
    public static void main(String[] args) {
        AuditHandler handler = new DirectLeaderAuditHandler();
        FirstLeaderAuditHandler firstLeaderAuditHandler = new FirstLeaderAuditHandler();
        FenGuanLeaderAuditHandler fenGuanLeaderAuditHandler = new FenGuanLeaderAuditHandler();
        handler.setNextAuditHandler(firstLeaderAuditHandler);
        firstLeaderAuditHandler.setNextAuditHandler(fenGuanLeaderAuditHandler);
        RequestParam requestParam = new RequestParam("MJ", 2);
        handler.audit(requestParam);
    }
}

摘取:

面试官:什么是责任链模式?_说一说责任链模式面试-CSDN博客

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值