深入设计模式—责任链模式(四)
一: 基本概念
- 定义:这个设计模式感觉是比较简单的,平时在我们工作中经常遇到,简单解释就是个人责任制,最简单的就是面试了,有的公司一面人事,二面技术,三面boss,这样的情况,什么意思呢?就是说我人事只负责给你找到这个人,了解基本信息之后是符合公司的标准的,那么接下来就是技术了,至于技术怎么样我就不管了,直接交给技术经理面试了,作为技术经理只考量技术就可以了,别的可以不用太关心,如果技术通过,就要跟人事谈薪资了,人事跟老板商量之后感觉可以,然后老板说,可以带来让我再把把关。这个就是简单的责任链的概念,通常还有比如:员工请假流程,ERP系统,或者OA系统涉及到流程的。
- 优势:1、降低耦合度。它将请求的发送者和接收者解耦。 2、简化了对象。使得对象不需要知道链的结构。 3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 4、增加新的请求处理类很方便。
- 缺点: 1、不能保证请求一定被接收。 2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。 3、可能不容易观察运行时的特征,有碍于除错。
- 使用场景: 1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 3、可动态指定一组对象处理请求。
代码实现
- 这里实现一个简单的请假流程:
- 场景:某公司有这样一个请假的系统,员工请假需提交请假申请,审批人是组长和项目经理,如果请假天数在3天以内,小组长说了算,如果大于3天,必须要向经理申请审批。
- 首先我们分析这个简单的场景:先模拟一个抽象的请假流程的类,这个类包括请假的动作,和下一个执行操作的人得信息。
- 接下来定义一个员工类的信息:
- 接下来就是两个实现类,一个组长的实现类,一个经理的实现类:
- 上面都完成之后我们就开始测试,这里用一个简单的工厂组装一下:
- 开始测试:
- 结果如下:
- 以上就是一个简单的责任链模式,后面如果还有人事审批,cto审批,老板审批,都可以扩展子类,然后在个个子类实现制自己的功能,不在能力范围内的直接丢给下一级审核。
参考Tomcat Filter 分析文章:https://www.jianshu.com/p/be47c9d89175