서비스 로케이터 패턴
위치에 사용하기 위해 서비스 로케이터 패턴 (서비스 로케이터 패턴) 우리는 때 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는 ( "찾고 새로운 서비스 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를 실행