三十一、拦截过滤器模式
拦截过滤器模式(Intercepting Filter Pattern),主要用于统一接收并过滤客户端的请求,根据过滤器的选择,将请求传送给对应的目标处理程序。
实现
创建过滤器接口IFilter
,接口实现类也就是不同的过滤类。创建目标处理程序类Target
,还有过滤器组合类FilterChain
,过滤器管理类FilterManager
以及客户端Client
。
过滤接口
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