设计模式:责任链模式
什么是责任链模式?
责任链模式(英文:Chain of Responsibility Pattern),它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。

一句话归纳
各人自扫门前雪,莫管他们瓦上霜
代码示例
我们在平时难免会因为各种各样的原因向自己所在的公司提出请假,就像我工作地点和老家离得非常遥远,回去的路上就要耽搁两天,所以每年过年的时候都会向公司多请几天假回家过年;但公司有请假的规定,请假一天需要跟项目经理申请,请假两天需要跟项目总监申请,请假超过三天需要跟CEO申请,大家在各自的公司请假是否跟我一样呢?可以在下方评论区畅所欲言。

适用性
以下我建议你考虑使用:
降低耦合度,把请求和处理分开;
有多个可以处理同一个请求,具体由哪个来处理请求在自行确定;
可以自由地添加一个新的处理者,比如在上面的示例中我想在添加一个CTO;
在不明确究竟是哪个处理者来处理时,向所有的处理者发送同一个请求;
现实中比如请假流程审批,采购流程审批、网关的设计等等都可以用责任链设计。
局限性
以下我建议你谨慎使用:
不能保证请求一定会被处理;
因为每一个请求都要从链头到链尾,所以性能会有一定的影响,所以要谨慎考虑链的长度;
调试比较麻烦,由于采用类似递归的方式,如果链比较长,调试就比较麻烦。
由于责任链的建立需要客户端来保证合理性,如果责任链每一个处理者错误设置,可能会出现循环调用的问题。

写在最后
好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。
