过滤器模式

124 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

作用:将抽象部分与实现部分分离,使它们都可以独立的变化。

过滤器模式

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。

stream流filter

java8中stream是过滤模式的一种简化过滤流。

List<Person> containsLi = personList().stream()
            .filter(item->item.getAge()>20)
            .collect(Collectors.toList());

spring 中的过滤器模式

Filter 过滤器

最直接的便是Filter过滤器。实现Filter接口,实现dofilter方法。

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {}
HandlerInterceptor 拦截器

HandlerInterceptor 拦截器也是过滤器模式的实现,多个过滤器通过Order进行排序或者手动注册的顺序,分别进行请求数据、返回数据的处理。

default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    return true;
  }

  default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
  }

  default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
  }

Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理的方式来执行。 Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。

spring cloud gateway 中的GlobalFilter

网关层对请求进行过滤处理。

public interface GlobalFilter {
  Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}