设计模式之拦截过滤器模式

1、什么是拦截过滤器模式?
拦截过滤器模式:对于应用程序的请求进行一些预处理和一些后处理。利用拦截过滤器可以做一些认证/授权/日志记录等操作。

2、名词解释:
过滤器:指的是请求在处理器处理之前进行一些其他操作的程序。
过滤器链:指的是过滤器的集合。
Target:指的是处理请求的程序。
过滤管理器:指的是用于管理过滤连和过滤器的程序。
客户端:指的是用于发送请求的程序。

3案例:
package com.sico.designpattern;

/**

  • 定义过滤器接口
    */
    public interface Filter {

    public void execute(String request);

}

package com.sico.designpattern;

/**

  • 创建认证实体过滤器
    */
    public class AuthenticationFilter implements Filter {
    @Override
    public void execute(String request) {
    System.out.println(“过滤器一》》》Authenticating request:” + request);
    }
    }

package com.sico.designpattern;

/**

  • 创建日志实体过滤器
    */
    public class DebugFilter implements Filter {
    @Override
    public void execute(String request) {
    System.out.println(“过滤器二》》》 Request log:” + request);
    }
    }

package com.sico.designpattern;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**

  • 创建过滤器链
    */
    public class FilterChain {

    private List filters = new ArrayList();
    private Target target;

    /添加过滤器/
    public void addFilter(Filter filter) {
    filters.add(filter);
    }

    /执行过滤器/
    public void execute(String request) {
    for (Filter ele : filters) {
    ele.execute(request);
    }
    /过滤器执行完之后,请求处理程序进行处理/
    target.execute(request);
    }

    public void setTarget(Target target) {
    this.target = target;
    }
    }

package com.sico.designpattern;

/**

  • 创建过滤器管理器
    */
    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);
    }
    }

package com.sico.designpattern;

/**

  • 请求处理类
    */
    public class Target {

    public void execute(String request) {
    System.out.println(“请求处理程序》》》Executing request:” + request);
    }
    }

package com.sico.designpattern;

/**

  • 创建客户端
    */
    public class Client {

    private FilterManager filterManager;

    public void setFilterManager(FilterManager filterManager) {
    this.filterManager = filterManager;
    }

    public void sendRequest(String request) {
    filterManager.filterRequest(request);
    }

}

package com.sico.designpattern;

/**

  • 演示类
    */
    public class Demo {
    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");
    

    }
    }

声明:上述所有资料来源于菜鸟教程,均自己学习之后写下。


版权声明:本文为weixin_44428051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。