责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链可能是一条直线,一个环链或者树状结构的一部分。

结构模式

  • Hander角色,定义出一个处理请求的接口。
  • ConcreHandler,具体处理者,并持有下家的引用,街道请求后可以选择将请求处理掉,也可以将请求传给下家

典型案例

Tomcat中的Filter就是使用了责任链模式,创建一个Filter需要在web.xml文件中做相应配置,还需要实现javax.servlet.Filter接口

1
2
3
4
5
6
7
8
9
10
public class TestFilter implements Filter{
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
public void destroy() {
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}