본문 바로가기

아는 만큼 보인다/Design Pattern

Service Provider Framework Pattern

* 구성 Compenent

1) Service Interface : Service 사용자에게 제공하기 위해 표준?으로 정한 API가 정의된 Interface

2) Service Registration API : Provider Interface의 구현체를 등록하는 API

3) Service Access API : Service Interface의 구현체를 얻어오는 API (정적 팩토리 메소드[각주:1])

4) Provider Interface : Service Interface의 하위 객체를 생성해주는 API가 정의된 Interface

 

* Service Provider Framework Pattern 구현 간단예 (JDBC가 해당됨)

// 1) Service Interface

public interface Service {...}

 

// 4) Provider Interface

public interface Provider {

Service newService();

}

 

// 팩토리 클래스 & 객체생성불가능 클래스

public class Services {

private static final Map<String, Provider> providersMap = new ConcurrentHasshMap<String, Provider>();

 

private Services() {} // 객체생성방지

 

// 2) Service Registration API

public static void registerProvider(String name, Provider provider) {

providersMap.put(name, provider);

}

 

// 3) Service Access API (정적 팩토리 메소드)

public static Service getMyService(String name) {

Provider provider =  proidersMap.get(name);

if(provider != null) {

return provider.newService();

} else {

throw new IllegalArgumentException("No Provider");

}

}

}

 

* 출처 : Effective Java 2판, 규칙1. 정적 팩토리 메소드 사용 고려


  1. 반환 타입의 하위 객체를 생성해 줄 수 있는 특징을 활용해 Interface의 하위 구현체를 반환해 줌 (ExecutorService Intreace의 구현체를 반환하는 Executors.new***ThreadPool() 메소드들이 해당됨) [본문으로]