Latest web development tutorials

서비스 로케이터 패턴

위치에 사용하기 위해 서비스 로케이터 패턴 (서비스 로케이터 패턴) 우리는 때 JNDI 조회 서비스를 사용하고 싶습니다. 서비스, ​​캐싱 기술의 서비스 로케이터 패턴 전체 사용 계정에 JNDI 룩업 높은 가격을 복용합니다. 서비스, ​​JNDI 조회 서비스 로케이터의 서비스 및 서비스 객체를 캐시에 대한 첫 번째 요청합니다. 다시 같은 서비스를 요청하면 서비스 로케이터는 크게 응용 프로그램 성능을 향상시킬 수 있습니다 캐시에 보인다. 다음은이 설계 패턴의 실체이다.

  • 서비스 (서비스) - 서비스 요청을 실제로 처리.이러한 서비스에 대한 참조는 JNDI 서버에서 찾을 수 있습니다.
  • 컨텍스트 / 초기 컨텍스트 - 당신이 참조를 찾을 서비스와 JNDI 컨텍스트.
  • 서비스 로케이터 (서비스 로케이터) - 서비스 로케이터는 접점 서비스의 단일 지점을 얻기 위해 JNDI 조회 및 캐싱 서비스를 통해입니다.
  • 캐시 (캐시) - 재사용하기 위해 캐시 스토리지 서비스 참조.
  • 클라이언트 (고객) - ServiceLocator를 통해 서비스의 클라이언트오브젝트 호출.

실현

기업이 다양한 객체를 나타냅니다으로 우리는ServiceLocator,InitialContext를, 캐시, 서비스를 생성합니다.서비스 1와서비스 2 엔티티 서비스를 나타냅니다.

ServiceLocatorPatternDemo,여기에 클라이언트로 데모 클래스는,ServiceLocator 서비스로케이터 디자인 패턴을 설명하는 데 사용됩니다.

서비스 로케이터 패턴 UML 다이어그램

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는 ( "찾고 새로운 서비스 1 객체를 생성");
         () 새로운 서비스 1을 반환;
      } 그렇지 경우 (jndiName.equalsIgnoreCase ( "서비스 2")) {
         에서 System.out.println는 ( "찾고 새로운 서비스 2 객체를 생성");
         () 새로운 서비스 2를 반환;
      }
      NULL을 반환;		
   }
}

4 단계

캐시 캐시를 만듭니다.

Cache.java

수입 인 java.util.ArrayList;
가져 오기를 java.util.List;

공용 클래스 캐시 {

   개인 목록 <서비스> 서비스;

   공개 캐시 () {
      서비스 = 새로운 ArrayList를 <서비스> ();
   }

   공공 서비스의 getService (문자열 serviceName에) {
      용 (서비스 서비스 : 서비스) {
         경우 (service.getName (). equalsIgnoreCase (서비스 명)) {
            에서 System.out.println는 (+ serviceName에 + "객체", "캐시 복귀");
            서비스를 반환;
         }
      }
      NULL을 반환;
   }

   공공 무효 addService (서비스 newService) {
      부울 = 거짓 존재;
      용 (서비스 서비스 : 서비스) {
         경우 (service.getName (). equalsIgnoreCase (newService.getName ())) {
            = 사실이 존재;
         }
      }
      {(! 존재하는) 경우
         services.add (newService);
      }
   }
}

5 단계

서비스 로케이터를 만듭니다.

ServiceLocator.java

공용 클래스 ServiceLocator {
   개인 정적 캐시 캐시;

   정적 {
      캐시 = 새로운 캐시 ();		
   }

   공공 정적 서비스의 getService (문자열 jndiName) {

      서비스 서비스 = cache.getService (jndiName);

      경우 (서비스! = NULL) {
         서비스를 반환;
      }

      InitialContext를 컨텍스트 = 새로운 InitialContext를 ();
      서비스 서비스 1 = (서비스) 것은, Context.lookup (jndiName);
      cache.addService (서비스 1)
      서비스 1을 반환;
   }
}

6 단계

서비스 로케이터 디자인 패턴을 보여ServiceLocator를 사용합니다.

ServiceLocatorPatternDemo.java

공용 클래스 ServiceLocatorPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {
      서비스 서비스 = ServiceLocator.getService ( "서비스 1");
      service.execute ();
      서비스 = ServiceLocator.getService ( "서비스 2");
      service.execute ();
      서비스 = ServiceLocator.getService ( "서비스 1");
      service.execute ();
      서비스 = ServiceLocator.getService ( "서비스 2");
      service.execute ();		
   }
}

7 단계

출력을 확인합니다.

찾고 새로운 서비스 1 객체를 생성
서비스 1 실행
찾고 새로운 서비스 2 객체를 생성
서비스 2를 실행
캐시 서비스 1 개체를 반환
서비스 1 실행
캐시 서비스 2 개체를 반환
서비스 2를 실행