サービスロケータパターン
私たちはときにJNDIルックアップサービスを利用したいの位置決めに使用するためのサービスロケータパターン(サービスロケータパターン)。 サービス、キャッシング技術のサービスロケータパターンをフルに活用するためにアカウントにJNDIルックアップ高い価格を取ります。 サービスの最初の要求、JNDIルックアップサービスロケータでサービスで、サービスオブジェクトをキャッシュします。 再び同じサービスを要求すると、サービスロケータを大幅にアプリケーションのパフォーマンスを向上させることができ、そのキャッシュに見えます。 以下は、このデザインパターンの実体です。
- サービス(サービス) -実際に要求を処理するサービスを提供しています。これらのサービスへの参照は、JNDIサーバーで見つけることができます。
- コンテキスト/初期コンテキスト-あなたが参照を検索するサービスとJNDIコンテキスト。
- サービスロケータ(サービスロケータ) -サービスロケータは、コンタクトサービスの単一のポイントを取得するためにJNDIルックアップおよびキャッシングサービスを介して行われます。
- キャッシュ(キャッシュ) -それらを再利用するためのキャッシュストレージサービスへの参照、。
- クライアント(クライアント) -のServiceLocatorを介してサービスのクライアントオブジェクトの呼び出し。
実現
エンティティは、様々なオブジェクトを表すように我々はのServiceLocator、InitialContextの、キャッシュ、サービスを作成します。サービス1とサービス2は、エンティティのサービスを表します。
ServiceLocatorPatternDemo、ここではクライアントとして私たちのデモクラスには、ServiceLocatorは、サービスロケータ設計パターンを実証するために使用されます。
ステップ1
サービス・インターフェース・サービスを作成します。
Service.java
パブリックインターフェイスのサービス{ 公共の文字列のgetName(); 公共ボイドは()を実行します。 }
ステップ2
サービスエンティティを作成します。
Service1.java
パブリッククラスサービス1は、サービスを{実装します 公共ボイド(実行){ System.out.println( "実行サービス1"); } @Override 公共の文字列のgetName(){ 「サービス1」を返します。 } }
Service2.java
パブリッククラスサービス2は、サービスを{実装します 公共ボイド(実行){ System.out.println( "実行サービス2"); } @Override 公共の文字列のgetName(){ 「サービス2」を返します。 } }
ステップ3
JNDIのInitialContextのためのクエリを作成します。
InitialContext.java
パブリッククラスInitialContextの{ パブリックオブジェクトの参照(文字列のjndiName){ 場合(jndiName.equalsIgnoreCase(「SERVICE1 ")){ System.out.println( "見上げると新しいService1のオブジェクトを作成"); 新しいサービス1を返します(); }エルス場合(jndiName.equalsIgnoreCase(「サービス2」)){ System.out.println( "見上げると、新しいサービス2オブジェクトを作成"); 新しいサービス2を返します(); } ヌルを返します。 } }
ステップ4
キャッシュキャッシュを作成します。
Cache.java
輸入はjava.util.ArrayList; 輸入java.util.Listに。 パブリッククラスキャッシュ{ プライベートリスト<サービス>サービス。 公共のキャッシュ(){ サービス=新しいのArrayList <サービス>(); } 公共サービスのgetService(文字列serviceNameを){ 用(Serviceサービス:サービス){ 場合(service.getName()。equalsIgnoreCase(serviceNameを)){ System.out.println( "戻って、キャッシュされた" + serviceNameを+ "オブジェクト"); サービスを返します。 } } ヌルを返します。 } 公共ボイドのaddService(サービスnewService){ ブール= falseの場合に存在します。 用(Serviceサービス:サービス){ 場合(service.getName()。equalsIgnoreCase(newService.getName())){ 真=存在します。 } } {(!が存在する)場合 services.add(newService)。 } } }
ステップ5
サービスロケータを作成します。
ServiceLocator.java
パブリッククラスのServiceLocator { プライベート静的キャッシュのキャッシュ; 静的{ キャッシュ=新しいキャッシュ(); } パブリック静的サービスのgetService(文字列のjndiName){ Serviceサービス= cache.getService(のjndiName)。 場合(サービス!= NULL){ サービスを返します。 } InitialContextのコンテキスト=新しいのInitialContext(); サービスサービス1 =(サービス)をcontext.lookup(のjndiName)。 cache.addService(サービス1)。 サービス1を返します。 } }
ステップ6
サービスロケータデザインパターンを実証するためのServiceLocatorを使用してください。
ServiceLocatorPatternDemo.java
パブリッククラスServiceLocatorPatternDemo { 公共の静的な無効メイン(文字列[] args){ Serviceサービス= ServiceLocator.getService(「サービス1」)。 service.execute()。 サービス= ServiceLocator.getService(「サービス2 "); service.execute()。 サービス= ServiceLocator.getService(「サービス1」)。 service.execute()。 サービス= ServiceLocator.getService(「サービス2 "); service.execute()。 } }
ステップ7
出力を確認します。
見上げると、新しいService1のオブジェクトを作成します サービス1の実行 見上げると、新しいサービス2オブジェクトを作成します サービス2の実行 キャッシュされたService1のオブジェクトを返します サービス1の実行 キャッシュされたサービス2オブジェクトを返します サービス2の実行