• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java设计模式责任链模式原理案例详解

java 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论
文章目录[隐藏]

引言

以请假流程为例,一般公司普通员工的请假流程简化如下:

普通员工发起一个请假申请,当请假天数小于3天时只需要得到主管批准即可;当请假天数大于3天时,主管批准后还需要提交给经理审批,经理审批通过,若请假天数大于7天还需要进一步提交给总经理审批。

使用 if-else 来实现这个请假流程的简化代码如下:

public class LeaveApproval
{
    public boolean process(String request, int number) {
        boolean result = handleByDirector(request); // 主管处理
        if (result == false) {  // 主管不批准
            return false;
        } else if (number < 3) {    // 主管批准且天数小于 3
            return true;
        }
        result = handleByManager(request); // 准管批准且天数大于等于 3,提交给经理处理
        if (result == false) {   // 经理不批准
            return false;
        } else if (number < 7) { // 经理批准且天数小于 7
            return true;
        }
        result = handleByTopManager(request);   // 经理批准且天数大于等于 7,提交给总经理处理
  <a>本文来源gao*daima.com搞@代#码&网6</a>      if (result == false) { // 总经理不批准
            return false;
        }
        return true;    // 总经理最后批准
    }
    private boolean handleByDirector(String request)
    {
        // 主管处理该请假申请
        if(request.length()>10)
            return false;
        return true;
    }
    private boolean handleByManager(String request) {
        // 经理处理该请假申请
        if(request.length()>5)
        return false;
        return true;
    }
    private boolean handleByTopManager(String request) {
        // 总经理处理该请假申请
        if(request.length()>3)
            return false;
        return true;
    }
}

问题看起来很简单,三下五除二就搞定,但是该方案存在几个问题:

  •  LeaveApproval 类比较庞大,各个上级的审批方法都集中在该类中,违反了 “单一职责原则”,测试和维护难度大
  •  当需要修改该请假流程,譬如增加当天数大于30天时还需提交给董事长处理,必须修改该类源代码(并重新进行严格地测试),违反了”开闭原则”
  • 该流程缺乏灵活性,流程确定后不可再修改(除非修改源代码),客户端无法定制流程

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java设计模式责任链模式原理案例详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址