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");}
}
声明:上述所有资料来源于菜鸟教程,均自己学习之后写下。