インターセプトフィルタパターン
いくつかの前処理/後処理を行うためのアプリケーションまたは応答でを要求するためのフィルタパターン(インターセプトフィルタパターン)をインターセプト。 フィルタを定義し、リクエストに応じて、ターゲット・アプリケーションの実用化への要求の前に。 フィルタは、次に、適切なハンドラに要求を認証/許可/ロギングやトラッキングの要求を行うことができます。 以下は、このデザインパターンの実体です。
- (フィルター)フィルター-特定のタスクを実行するための要求要求ハンドラの実行前または後にろ過します。
- フィルターチェーン(フィルター・チェーン) -複数のフィルタ、および定義された順序でターゲットにこれらのフィルタを実装したフィルタチェーン。
- ターゲット-ターゲットは、オブジェクト要求ハンドラです。
- フィルタマネージャ(フィルタマネージャ) -フィルタマネージャのフィルタおよびフィルタチェーン。
- クライアント(クライアント) - Clientオブジェクトは、要求を送信するために、オブジェクトをターゲットに。
実現
私たちは、クライアントがさまざまなオブジェクトなどのエンティティを表し、ターゲットをれるFilterChain、FilterManagerを作成します。 AuthenticationFilterとDebugFilterは、エンティティフィルタを表します。
InterceptingFilterDemoは、我々はインターセプトフィルターのデザインパターンを実証するために、クライアントクラスの使用を示します。
ステップ1
フィルタインターフェイスのフィルターを作成します。
Filter.java
パブリックインターフェイスフィルタ{ 公共ボイドは(文字列要求)を実行します。 }
ステップ2
エンティティフィルタを作成します。
AuthenticationFilter.java
パブリッククラスAuthenticationFilterは{フィルタを実装します ます。public void {(文字列要求)を実行 System.out.println( "認証要求:" +リクエスト)。 } }
DebugFilter.java
パブリッククラスDebugFilterは{フィルタを実装します ます。public void {(文字列要求)を実行 System.out.println( "リクエストログ:" +リクエスト)。 } }
ステップ3
ターゲットを作成します。
Target.java
パブリッククラスターゲット{ ます。public void {(文字列要求)を実行 System.out.println( "実行要求:" +リクエスト)。 } }
ステップ4
フィルタチェーンを作成します。
FilterChain.java
輸入はjava.util.ArrayList; 輸入java.util.Listに。 パブリッククラスれるFilterChain { プライベートリスト<フィルター>フィルター=新しいのArrayList <フィルター>(); プライベートターゲットターゲット。 公共ボイドかaddFilter(フィルター・フィルター){ filters.add(フィルター); } ます。public void {(文字列要求)を実行 {:(フィルターフィルターフィルター)のために filter.execute(リクエスト)。 } target.execute(リクエスト)。 } 公共ボイドがsetTarget(ターゲットターゲット){ this.target =ターゲット。 } }
ステップ5
フィルタマネージャを作成します。
FilterManager.java
パブリッククラスFilterManager { れるFilterChainフィルターチェーン; 公共FilterManager(ターゲットターゲット){ フィルターチェーン=新しいれるFilterChain(); filterChain.setTarget(ターゲット)。 } 公共ボイドのSetFilter(フィルター・フィルター){ filterChain.addFilter(フィルター); } 公共ボイドfilterRequest(文字列要求){ filterChain.execute(リクエスト)。 } }
ステップ6
クライアントのクライアントを作成します。
Client.java
パブリッククラスクライアント{ FilterManager filterManager; 公共ボイドsetFilterManager(FilterManager filterManager){ this.filterManager = filterManager。 } 公共ボイドのsendRequest(文字列要求){ filterManager.filterRequest(リクエスト)。 } }
ステップ7
インターセプトフィルターのデザインパターンを実証するために、クライアントを使用します。
FrontControllerPatternDemo.java
パブリッククラスInterceptingFilterDemo { 公共の静的な無効メイン(文字列[] args){ FilterManager filterManager =新しいFilterManager(新しいターゲット()); filterManager.setFilter(新しいAuthenticationFilter()); filterManager.setFilter(新しいDebugFilter()); クライアントクライアント=新しいクライアント(); client.setFilterManager(filterManager)。 client.sendRequest( "HOME")。 } }
ステップ8
出力を確認します。
認証要求:HOME リクエストログ:HOME 実行要求:HOME