6.33. Intercept filter mode

发布时间 :2025-10-25 12:24:49 UTC      

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
Principles, Technologies, and Methods of Geographic Information Systems  102

In recent years, Geographic Information Systems (GIS) have undergone rapid development in both theoretical and practical dimensions. GIS has been widely applied for modeling and decision-making support across various fields such as urban management, regional planning, and environmental remediation, establishing geographic information as a vital component of the information era. The introduction of the “Digital Earth” concept has further accelerated the advancement of GIS, which serves as its technical foundation. Concurrently, scholars have been dedicated to theoretical research in areas like spatial cognition, spatial data uncertainty, and the formalization of spatial relationships. This reflects the dual nature of GIS as both an applied technology and an academic discipline, with the two aspects forming a mutually reinforcing cycle of progress.