任链模式
任链模式(Chain of Responsibility Pattern)属于行为型模式(关注对象之间的通信),此模式将请求的发送者和请求的处理者解耦,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
缺点: 1、不能保证请求一定被接收。 2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
使用场景: 1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 3、可动态指定一组对象处理请求。
理论和实战
理论知识—菜鸟教程
https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html
实战--点评外卖投放系统中设计模式的实践
https://tech.meituan.com/2020/03/19/design-pattern-practice-in-marketing.html
框架中的使用
(1)Spring MVC中 HandlerExecutionChain
SpringMVC中实际上是基于Servlet的框架,当客户端发送请求到web时,都会进入DispatcherServlet中,然后根据Servlet的生命周期去执行doService方法,在doService方法中有一个关键方法doDispatch,其中就运用到得了责任链模式来对进来的请求进行处理。
(2)Spring Security中FilterChainProxy
SpringSecurity是基于Spring实现的权限认证与校验的框架,它通过将请求内容交给过滤器链进行处理,通过框架提供的默认filter以及我们定义的filter来对请求进行处理,从而实现web权限的校验。FilterChainProxy实际上实现了web中Filter过滤器,也是采用了责任链模式来实现。
(3)Spring AOP 通过责任链模式来管理Advisor(通知), 一个切入点(目标方法)可以织入多个通知,这些需要织入的通知就形成了一个责任链,就像Filter链一样。