过滤器链模式

2019-04-19  本文已影响0人  蜗牛ICU

前言:

因为现在设计模式在网络上已经泛滥,但是还是有好多程序员不能够灵活的运用设计模式,这个是对设计模式简单的介绍,因为网络上比较多类似的文章,所以本人就从网络上抄了一部分,等23种设计模式整理完成之后会根据实际的需求利用设计模式在代码中设计一些开源的插件,请继续关注。
原版[菜鸟教程]

简介:
案例:

第一步: 创建过滤器 filter:

public interface Filter {
   public void execute(String request);
}

第二步: 创建实体过滤器:

public class AuthenticationFilter implements Filter {
   public void execute(String request){
      System.out.println("Authenticating request: " + request);
   }
}

public class DebugFilter implements Filter {
   public void execute(String request){
      System.out.println("request log: " + request);
   }
}

第三步: 创建 Target:

public class Target {
   public void execute(String request){
      System.out.println("Executing request: " + request);
   }
}

第四步: 创建过滤器链:

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;
   }
}

第五步: 创建过滤管理器 :

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

第六步: 创建客户端 :

public class Client {
   FilterManager filterManager;
 
   public void setFilterManager(FilterManager filterManager){
      this.filterManager = filterManager;
   }
 
   public void sendRequest(String request){
      filterManager.filterRequest(request);
   }
}

第七步: 使用 Client 来演示拦截过滤器设计模式 :

public class InterceptingFilterDemo {
   public static void main(String[] args) {
      FilterManager filterManager = new FilterManager(new Target());
      filterManager.setFilter(new AuthenticationFilter());
      filterManager.setFilter(new DebugFilter());
 
      Client client = new Client();
      client.setFilterManager(filterManager);
      client.sendRequest("HOME");
   }
}

第八步: 输出:

Authenticating request: HOME
request log: HOME
Executing request: HOME

上一篇下一篇

猜你喜欢

热点阅读