练习源码:https://github.com/liaoooyx/Design-Patterns
FilterChain属于责任链最外层的入口,该类中持有责任链中的各个处理器(集合、数组等方式),并在doFilter()方法种进行递归调用。结束条件可设置为责任链集合为空或其他条件。
所有过滤器(处理器)都继承自FIlter接口,并实现其doFilter()方法。
FiterChain和Filter的接口的doFilter()方法签名不同:
//FilterChain中:
public void doFilter(Target target) {
if (index == filterList.size()) {
return;
}
//获得下一个过滤器
Filter f = getNextFilter();
//执行一个处理器/过滤器的doFilter()方法,然后在该过滤器的doFilter()方法内回调此方法
f.doFilter(target, this);
}
//Filter中:
public void doFilter(Target target, FilterChain chain) {
//操作
...
//回调FilterChain的doFilter方法
chain.doFilter(target);
}
FilterChain中额外还有个addFilter()方法,用于添加其他过滤器。