设计模式之责任链模式

Posted by mingo on 2019-04-10 09:55

模式介绍

该模式的精髓在于Chain, 链式; 在链条上的每一个环, 就是一个单独的处理逻辑; 只有把链条上的每个环都执行过之后, 业务才算执行完成

通过这种方式, 我们可以很灵活的增加一环, 以及调整环在链条的位置

代码实现

1
2
3
4
public interface Handler {

    public Response handle(Request request) ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Handler1 implements Handler {

    private Handler next;

    public Response handle(Request request) {

        // before

        Response resp = next.handler(request);

        // after 

        return resp;
    }
}

还有种更经典的实现

1
2
3
public interface Filter {
    void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
}

然后添加自己的业务过滤器

1
2
3
4
5
6
7
8
9
10
11
public class XXXFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // before filter code

        // next filter
        chain.doFilter(request, response);

        // after filter code
    }
}

大家可以猜测下FilterChain是怎么实现遍历Filter

典型应用

  • Servlet Filter组件; 类似还有拦截器组件

参见上面的示例代码