设计模式学习笔记--拦截过滤器模式

来源:互联网 发布:手机淘宝怎么评价宝贝 编辑:程序博客网 时间:2024/04/30 10:38

三十一、拦截过滤器模式

拦截过滤器模式(Intercepting Filter Pattern),主要用于统一接收并过滤客户端的请求,根据过滤器的选择,将请求传送给对应的目标处理程序。

实现

创建过滤器接口IFilter,接口实现类也就是不同的过滤类。创建目标处理程序类Target,还有过滤器组合类FilterChain,过滤器管理类FilterManager以及客户端Client

intercepting

  • 过滤接口

    IFilter.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 过滤器接口*/public interface IFilter {  public void execute(String request);}
  • 接口实现类

    AuthenticationFilter.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 过滤器的接口实现类*/public class AuthenticationFilter implements IFilter {  @Override  public void execute(String request) {      System.out.println("授权请求: "+request);  }}

    DebugFilter.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 过滤器的接口实现类*/public class DebugFilter implements IFilter {  @Override  public void execute(String request) {      System.out.println("调试请求: "+request);  }}
  • 目标程序类

    Target.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 目标程序类*/public class Target {  public void execute(String request){      System.out.println("执行处理请求 "+request);  }}
  • 过滤器管理类

    FilterManager.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 过滤器管理类*/public class FilterManager {  FilterChain filterChain;  public FilterManager(Target target){      filterChain = new FilterChain();      filterChain.setTarget(target);  }  public void setFilter(IFilter filter){      filterChain.addFilter(filter);  }  public void filterRequest(String request){      filterChain.execute(request);  }}
  • 组合过滤器类

    FilterChain.java

    package patterns.intercepting;import java.util.ArrayList;import java.util.List;/*** Created by lenovo on 2016/12/12 0012.* 过滤器组合类*/public class FilterChain {  private List<IFilter> filters = new ArrayList<>();  private Target target;  public void addFilter(IFilter filter){      filters.add(filter);  }  public void execute(String request){      for (IFilter filter:filters) {          filter.execute(request);      }      target.execute(request);  }  public void setTarget(Target target){      this.target = target;  }}
  • 客户端

    Client.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 客户端类,用于请求*/public class Client {  FilterManager filterManager;  public void setFilterManager(FilterManager filterManager) {      this.filterManager = filterManager;  }  public void sendRequest(String request){      filterManager.filterRequest(request);  }}
  • 演示

    InterceptingFilterPatternDemo.java

    package patterns.intercepting;/*** Created by lenovo on 2016/12/12 0012.* 演示*/public class InterceptingPatternDemo {  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");  }}

  • 输出

    授权请求: Home调试请求: Home执行处理请求 Home

0 0
原创粉丝点击