又称:管道模式

在处理请求和响应之前,依次处理一些预处理过程。

例如在 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