假设我们有3个Interceptor,用责任链模式串联,一个个进行处理,代码写的话挺复杂的,但是如果直接把这3个Interceptor放在List中,for循环执行,每个interceport再加个supoort之类的条件判断,也能很简单地实现,那么责任链的写法优势在哪?
// 这种简单的写法对比与责任链模式有什么缺陷?
List<Interceptor> interceptors = new LinkedList<>();
for(Interceptor interceptor: interceptors) {
if(interceptor.support(xx)) {
interceptor.process(xx);
}
}
以tomcat为例。
如果我用session存储用户登录信息,现在随着用户数量增长,增加了几台服务器,这时出现了一个问题,用户首先在一台服务器上登录了,但是过一会又去请求的时候,他的请求被路由到了另一台服务器上,那台服务器的session没有存储他的登录信息,那么他就需要重新登录
现在我想把登录信息放到redis当中,用户请求过来的时候从redis中取出session放到当前线程的ThreadLocal中,用户访问完毕再删除登录信息,并且把session存入redis

如图,使用责任链模式很方便
如果tomcat不使用责任链模式,而是使用for循环

那么就应该把chain.doFilter(req,resp)前后的代码放到两个方法中,并且写两个for循环
最终实现了相同的功能,代码没有任何缺陷,只是用过滤器链模式看到类名就能想到它的功能,理解方便一点,自己用的时候怎么写都行