拦截过滤器模式
基本介绍
1.用于对应用程序的请求或响应做一些预处理 / 后处理,定义过滤器,并在把请求传给实际目标应用程序之前,应用在请求上,过滤器可以做认证 / 授权 / 记录日志,或者跟踪请求,然后把请求传给相应的处理程序
2.角色
(1)Filter:过滤器,在请求处理程序执行请求之前或之后,执行某些任务
(2)Filter Chain:过滤器链,聚合 单 / 多个 Filter,并在 Target 上按照定义的顺序执行这些过滤器
(3)Filter Manager:聚合 Filter Chain,过滤管理器,管理过滤器和过滤器链
(4)Target:请求处理程序
(5)Client:客户端,向 Target 对象发送请求的对象
代码示例
import java.util.ArrayList;
import java.util.List;
public class InterceptingFilter {//客户端
public static void main(String[] args) {
FilterManager filterManager = new FilterManager(new Target());
filterManager.addFilter(new AuthenticationFilter());
filterManager.addFilter(new DebugFilter());
filterManager.execute("view");
}
}
class FilterManager {//过滤管理器
FilterChain filterChain;
public FilterManager(Target target) {
filterChain = new FilterChain();
filterChain.setTarget(target);
}
public void addFilter(Filter filter) {
filterChain.addFilter(filter);
}
public void execute(String request) {
filterChain.execute(request);
}
}
class FilterChain {//过滤器链
private List<Filter> filters = new ArrayList<Filter>();
private Target target;
public void addFilter(Filter filter) {
filters.add(filter);
}
public void execute(String request) {
for (Filter filter : filters) {
filter.execute(request);
}
target.execute(request);
}
public void setTarget(Target target) {
this.target = target;
}
}
interface Filter {//过滤器接口
public void execute(String request);
}
class AuthenticationFilter implements Filter {//具体过滤器
public void execute(String request) {
System.out.println("认证请求:" + request);
}
}
class DebugFilter implements Filter {//具体过滤器
public void execute(String request) {
System.out.println("记录请求日志:" + request);
}
}
class Target {//请求处理程序
public void execute(String request) {
System.out.println("执行请求:" + request);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战