文章作者:Tyan
博客:noahsnail.com
1. 服務提供者框架介紹
1.1 什么是服務提供者框架
服務提供者框架英文為Service Provider Framework,主要是指:多個服務提供者實現(xiàn)一個服務丽旅,系統(tǒng)為客戶端提供多個實現(xiàn)催什,并把他們從多個實現(xiàn)中解耦出來徘溢。服務提供者的改變對它們的客戶端是透明的,這樣提供了更好的可擴展性拓萌。例如辙浑,JDBC,JMS等就是用了服務提供者框架衷蜓。
1.2 服務提供者框架的組件
服務提供者框架主要有四個組件:
Service Interface:服務接口累提,將服務通過抽象統(tǒng)一聲明,供客戶端調(diào)用磁浇、由各個服務提供者具體實現(xiàn)斋陪。
Provider Registration API:服務提供者注冊API,用于系統(tǒng)注冊服務提供者置吓,使得客戶端可以訪問它實現(xiàn)的服務无虚。
Service Access API:服務訪問API,用戶客戶端獲取相應的服務衍锚。
Service Provider Interface:服務提供者接口友题,這些服務提供者負責創(chuàng)建其服務實現(xiàn)的實例。(非必須)
2. 服務提供者框架實現(xiàn)
Service Interface:
// Service interface
public interface Service {
... // Service-specific methods go here
}
Provider Registration API 和 Service Access API:
// Noninstantiable class for service registration and access
public class Services {
private Services() { } // Prevents instantiation (Item 4)
// Maps service names to services
private static final Map<String, Provider> providers =
new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";
// Provider registration API
public static void registerDefaultProvider(Provider p) {
registerProvider(DEFAULT_PROVIDER_NAME, p);
}
public static void registerProvider(String name, Provider p){
providers.put(name, p);
}
// Service access API
public static Service newInstance() {
return newInstance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name) {
Provider p = providers.get(name);
if (p == null)
throw new IllegalArgumentException(
"No provider registered with name: " + name);
return p.newService();
}
}
Service Provider Interface:
// Service provider interface
public interface Provider {
Service newService();
}
3. 服務提供者架構(gòu)圖
參考資料:
1戴质、http://blog.csdn.net/zl3450341/article/details/7227197
2度宦、http://liwenshui322.iteye.com/blog/1267202
3踢匣、Effective Java 2.0