责任链模式的定义:责任链模式指的是--某个请求需要多个对象进行处理,从而避免请求的发送者和接收之间的耦合关系,将这些对象连成一条链子,并沿着这条链子传递请求,直到有对象处理它为止
例如:
从生活中的例子可以发现,某个请求可能需要几个人的审批,即使技术经理审批完了,还需要上一级的审批.
责任链模式的结构图
即有A,B,C,D四个工人,他们都具备两个能力
1.自己工作的拧螺丝方法
2.下一步让谁做
主要涉及两个角色:
1>抽象处理者角色(Handler):定义出一个处理请求的接口,这个接口通常由接口或抽象类来实现
2>具体处理者角色(ConcreteHandler):具体处理者接受到请求后,可以选择将该请求处理掉,或者将请求传给下一个处理者,因此,每个具体处理者需要保存下一个处理者的引用.以便把请求传递下去
责任链模式的使用场景
1>一个系统的审批需要多个对象才能完成处理的情况下,例如请假系统
2>代码中存在多个if--else语句的情况下,此时可以考录使用责任链模式进行代码进行重构
责任链模式的优缺点:
优点:
(1)降低了请求的发送者和接收者之间的耦合
(2)把多个条件判定分散到各个处理类中,使得代码更加清晰,责任更加明确
缺点:
(1)在找到正确的处理对象之前,所有的条件判定都要执行一遍,当责任链过长时,可能会引起性能问题
(2)可能导致某个请求不被处理