责任链设计模式与用列表遍历对比有什么优势?

假设我们有3个Interceptor,用责任链模式串联,一个个进行处理,代码写的话挺复杂的,但是如果直接把这3个Interceptor放在List中,for循环执行,每个interceport再加个supoort之类的条件判断,也能很简单地实现,那么责任链的写法优势在哪?

// 这种简单的写法对比与责任链模式有什么缺陷?
List<Interceptor> interceptors = new LinkedList<>();

for(Interceptor interceptor: interceptors) {
    if(interceptor.support(xx)) {
        interceptor.process(xx);
    }
}
阅读 1.4k
1 个回答
新手上路,请多包涵

以tomcat为例。

如果我用session存储用户登录信息,现在随着用户数量增长,增加了几台服务器,这时出现了一个问题,用户首先在一台服务器上登录了,但是过一会又去请求的时候,他的请求被路由到了另一台服务器上,那台服务器的session没有存储他的登录信息,那么他就需要重新登录

现在我想把登录信息放到redis当中,用户请求过来的时候从redis中取出session放到当前线程的ThreadLocal中,用户访问完毕再删除登录信息,并且把session存入redis

如图,使用责任链模式很方便

如果tomcat不使用责任链模式,而是使用for循环
那么就应该把chain.doFilter(req,resp)前后的代码放到两个方法中,并且写两个for循环

最终实现了相同的功能,代码没有任何缺陷,只是用过滤器链模式看到类名就能想到它的功能,理解方便一点,自己用的时候怎么写都行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进