Java设计模式之「责任链模式」

责任链模式的主要作用是:职责分离、任务传递。

解读

关键角色

责任链中包含两个关键角色:Chain、Processor。
Chain负责将所有的Processer关联起来,也可以称为是Processor的Container。所有的Processer都实现同一个抽象接口,每个Processor负责自己的工作内容,同时决定是否继续链式调用。

图示

责任链模式的关键类图和时序图如下所示:


image.png

示例

在servlet项目中,Filter是一个典型的使用了责任链模式的场景。

Filter关键代码

public interface Filter {
    /**
     * 由于外部请求到来,触发了Filter.doFilter的执行;当前Filter执行完毕后,可以决定是否触发Chain里的下一个Filter执行,或者是直接结束掉调用链的执行。
     */
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
            throws IOException, ServletException{
            //filter 业务处理
            ...
            //触发后续filter调用
            chain.doFilter(request, response);
            ...
    }
}

FilterChain关键代码

private class Chain implements FilterChain
    {
      //责任链
        final List<FilterHolder> _chain;
     //负责处理该请求的Servlet
        final ServletHolder _servletHolder;
      //当前处理到哪个filter
        int _filter= 0;

        /* ------------------------------------------------------------ */
        @Override
        public void doFilter(ServletRequest request, ServletResponse response)
            throws IOException, ServletException
        {
            // pass to next filter
            if (_filter < _chain.size())
            {
                FilterHolder holder= _chain.get(_filter++);

                Filter filter= holder.getFilter();

               filter.doFilter(request, response, this);

                return;
            }

            // 当所有Filter执行完毕,Call servlet
           ...
                _servletHolder.handle(_baseRequest,request, response);

           ... 
        }

参考资料

https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容