又称:管道模式
在处理请求和响应之前,依次处理一些预处理过程。
例如在 http 服务器中,真正用 controller 处理请求之前,总要经过一系列中间件 middleware。
ref: 拦截过滤器模式 | 菜鸟教程
- Filter 表示与处理过程,Target 表示最终要执行的过程,execute() 就是执行其目标过程
- FilterChain 表示预处理过程以及最终的目标过程,拥有一系列 filter 和一个 Target
- FilterManager 保有一个 FilterChain 用于处理链式请求
public interface Filter {
public void execute(String request);
}
import java.util.ArrayList;
import java.util.List;
public class FilterChain {
private List<Filter> filters = new ArrayList<Filter>();
private Target target;
public void addFilter(Filter filter){
filters.add(filter);
}
public void execute(String request){
for (Filter filter : filters) {
filter.execute(request);
}
target.execute(request);
}
public void setTarget(Target target){
this.target = target;
}
}
- FilterChain 的 execute 方法封装了 filter.execute 和 target.execute 。此处是核心
public class FilterManager {
FilterChain filterChain;
public FilterManager(Target target){
filterChain = new FilterChain();
filterChain.setTarget(target);
}
public void setFilter(Filter filter){
filterChain.addFilter(filter);
}
public void filterRequest(String request){
filterChain.execute(request);
}
}
- FilterManager 负责组装 FilterChain