java责任链模式 filter_Java设计模式之「责任链模式」

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

解读

关键角色

责任链中包含两个关键角色:Chain、Processor。

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

图示

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

3ffadde84808

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 _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);

...

}

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值