>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21404 个阅读者 刷新本主题
 * 贴子主题:  Java设计模式:拦截过滤器模式 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-08-16 20:14:28     消息  查看  搜索  好友  邮件  复制  引用

  

拦截过滤器模式

    拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。    
  • 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。
  • 过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器。
  • Target - Target 对象是请求处理程序。
  • 过滤管理器(Filter Manager) - 过滤管理器管理过滤器和过滤器链。
  • 客户端(Client) - Client 是向 Target 对象发送请求的对象。

实现

     我们将创建 FilterChain、FilterManager、Target、Client 作为表示实体的各种对象。AuthenticationFilter 和 DebugFilter 表示实体过滤器。

     InterceptingFilterDemo,我们的演示类使用 Client 来演示拦截过滤器设计模式。

    点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

步骤 1

     创建过滤器接口 Filter。                      

Filter.java

public   interface   Filter   {
    public   void   execute ( String   request ) ;
}

步骤 2

     创建实体过滤器。                      

AuthenticationFilter.java

public   class   AuthenticationFilter   implements   Filter   {
    public   void   execute ( String   request ) {
       System . out . println ( " Authenticating request:  "  +  request ) ;
    }
}

DebugFilter.java

public   class   DebugFilter   implements   Filter   {
    public   void   execute ( String   request ) {
       System . out . println ( " request log:  "  +  request ) ;
    }
}

步骤 3

     创建 Target。                      

Target.java

public   class   Target   {
    public   void   execute ( String   request ) {
       System . out . println ( " Executing request:  "  +  request ) ;
    }
}

步骤 4

     创建过滤器链。                      

FilterChain.java

import   java . util . ArrayList ;
import   java . util . List ;

public   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 ;
    }
}

步骤 5

     创建过滤管理器。                      

FilterManager.java

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 ) ;
    }
}

步骤 6

     创建客户端 Client。                      

Client.java

public   class   Client   {
    FilterManager   filterManager ;

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

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

步骤 7

     使用 Client 来演示拦截过滤器设计模式。                      

InterceptingFilterDemo.java

public   class   InterceptingFilterDemo   {
    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 " ) ;
    }
}

步骤 8

     执行程序,输出结果:

Authenticating request: HOME

request log: HOME

Executing request: HOME



程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-15 12:22:01 重新编辑]
  Java面向对象编程-->内部类
  JavaWeb开发-->Web运作原理(Ⅳ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->Socket用法详解
  精通Spring-->绑定CSS样式
  Vue3开发-->创建综合购物网站应用
  java的三种随机数生成方式
  BIO模型的缺陷
  NIO底层原理
  用VisualVM远程监控Java进程
  Java的对象的拷贝方式集合
  Java设计模式:抽象工厂模式
  深入分析synchronized实现原理
  Java入门实用代码:使用 Enumeration 遍历 HashTable
  Java入门实用代码:修改链表LinkedList
  Java入门实用代码:获取链表(LinkedList)的第一个和最后一...
  Java入门实用代码:文件重命名
  Java入门实用代码:将文件内容复制到另一个文件
  Java 入门实用代码: 数组差集
  通过java.net.URL类连接HTTP服务器时获取响应结果的头部信息
  Java Pattern和Matcher字符匹配详解
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。