6.33. Intercept filter mode

发布时间 : 2025-10-25 13:34:20 UTC      

Page Views: 9 views

Define the filter and apply it to the request before passing it to the actual target application. The following are the entities of this design pattern.

  • 过滤器(Filter) -filters perform certain tasks before or after the request handler executes the request.

  • 过滤器链(Filter Chain) -the filter chain comes with multiple filters and executes them in the defined order on the Target.

  • Target -the Target object is the request handler.

  • 过滤管理器(Filter Manager) -filter manager manages filters and filter chains.

  • 客户端(Client) -Client is the object that sends the request to the Target object.

6.33.1. Realize

We will create FilterChain FilterManager Target Client As various objects that represent entities. AuthenticationFilter And DebugFilter Represents an entity filter.

InterceptingFilterDemo Class usage Client To demonstrate the interception filter design pattern.

拦截过滤器模式的 UML 图

6.33.2. Step 1

Create the filter interface Filter.

Filter.java

publicinterfaceFilter{publicvoidexecute(Stringrequest);} 

6.33.3. Step 2

Create a solid filter.

AuthenticationFilter.java

publicclassAuthenticationFilterimplementsFilter{publicvoidexecute(Stringrequest){System.out.println("Authenticating request:"+request);}} 

DebugFilter.java

publicclassDebugFilterimplementsFilter{publicvoidexecute(Stringrequest){System.out.println("request log:"+request);}} 

6.33.4. Step 3

Create a Target.

Target.java

publicclassTarget{publicvoidexecute(Stringrequest){System.out.println("Executing request:"+request);}} 

6.33.5. Step 4

Create a filter chain.

FilterChain.java

importjava.util.ArrayList;importjava.util.List;publicclassFilterChain{privateList<Filter>filters=newArrayList<Filter>();privateTargettarget;publicvoidaddFilter(Filterfilter){filters.add(filter);}publicvoidexecute(Stringrequest){for(Filterfilter:filters){filter.execute(request);}target.execute(request);}publicvoidsetTarget(Targettarget){this.target=target;}} 

6.33.6. Step 5

Create a filter manager.

FilterManager.java

publicclassFilterManager{FilterChainfilterChain;publicFilterManager(Targettarget){filterChain=newFilterChain();filterChain.setTarget(target);}publicvoidsetFilter(Filterfilter){filterChain.addFilter(filter);}publicvoidfilterRequest(Stringrequest){filterChain.execute(request);}} 

6.33.7. Step 6

Create a client Client.

Client.java

publicclassClient{FilterManagerfilterManager;publicvoidsetFilterManager(FilterManagerfilterManager){this.filterManager=filterManager;}publicvoidsendRequest(Stringrequest){filterManager.filterRequest(request);}} 

6.33.8. Step 7

Use Client To demonstrate the interception filter design pattern.

InterceptingFilterDemo.java

publicclassInterceptingFilterDemo{publicstaticvoidmain(String[]args){FilterManagerfilterManager=newFilterManager(newTarget());filterManager.setFilter(newAuthenticationFilter());filterManager.setFilter(newDebugFilter());Clientclient=newClient();client.setFilterManager(filterManager);client.sendRequest("HOME");}} 

6.33.9. Step 8

Execute the program and output the result:

Authenticating request: HOME request log: HOME Executing request: HOME 
《地理信息系统原理、技术与方法》  97

最近几年来,地理信息系统无论是在理论上还是应用上都处在一个飞速发展的阶段。 GIS被应用于多个领域的建模和决策支持,如城市管理、区划、环境整治等等,地理信息成为信息时代重要的组成部分之一; “数字地球”概念的提出,更进一步推动了作为其技术支撑的GIS的发展。 与此同时,一些学者致力于相关的理论研究,如空间感知、空间数据误差、空间关系的形式化等等。 这恰好说明了地理信息系统作为应用技术和学科的两个方面,并且这两个方面构成了相互促进的发展过程。