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

本文介绍了一种设计模式——拦截过滤器模式,并通过具体代码示例详细解释了其工作原理及实现过程。该模式用于统一处理客户端请求,通过定义过滤器接口及其实现类来实现对请求的过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三十一、拦截过滤器模式

拦截过滤器模式(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值