Java设计模式之责任链模式

        责任链模式可以根据字面意思理解,就是一个任务,需要经过很多个节点共同完成,现实中常见的有请假,我们在OA上提交了一个请假流程,首先得你的上级领导审批通过,然后部门经理,然后人事部门审批,最终你的请假流程就完成了。还有像gateway中的filter,请求都是需要经过这些filter的逻辑校验,通过才往下走,这些都是责任链模式的运用,那么我们如何通过代码案例来体现责任链模式呢?

        我计划使用责任链模式来模拟一下请假的流程,请假一共分三个审批,上级领导、部门经理、HR审批。代码示例如下

审批父类

public abstract class Approval {

    //用来指向下一个审批节点
    protected Approval next;

    /**
     * 保存下一个节点,便于链式调用
     * @param next
     * @return
     */
    public Approval connect(Approval next) {
        this.next = next;
        return next;
    }

    public void leave() {
        boolean flag = this.doLeave();
        if (flag) {
            Optional.ofNullable(next).ifPresent(Approval::leave);
        }
    }

    public abstract boolean doLeave();

}

上级领导审批类

public class LeaderApproval extends Approval {
    @Override
    public boolean doLeave() {
        System.out.println("主管审批通过");
        return true;
    }
}

部门经理审批类

public class ManagerApproval extends Approval {
    @Override
    public boolean doLeave() {
        System.out.println("经理审批通过");
        return true;
    }
}

HR部门审批类

public class HRApproval extends Approval {
    @Override
    public boolean doLeave() {
        System.out.println("人事审批通过");
        return true;
    }
}

测试代码

public class Main {

    public static void main(String[] args) {
        Approval approval = new LeaderApproval();
        approval.connect(new ManagerApproval()).connect(new HRApproval());
        approval.leave();
    }
}

演示效果

以上是责任链模式的演示代码,这种模式适合那种前面节点对后面节点有影响的场景,实际工作中可以想到的是工作流。工作流的流程可以联想到责任链模式。还有就是security的获取用户信息的流程有这种设计模式的运用,其他的没想到了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值