静态工厂方法之服务提供者框架
靜態工廠返回的對象所屬的類,在編寫包含該靜態工廠方法的類的時候,可以不必存在.這種靈活的靜態工廠方法構成了服務提供者框架的基礎,例如JDBC的API.服務提供者框架是指這樣一個系統:多個服務提供者實現一個服務,系統為服務提供者的客戶端提供多個實現.并把它們從多個實現中解耦出來.
服務提供者框架包含四大組件-服務接口(提供者實現),提供者注冊API(由系統用來注冊實現),服務訪問API(客戶端用來訪問服務的實例),服務提供者接口(服務者負責創建其服務實現的實例).下面的例子就是服務提供者框架的具體實現:
首先是服務接口和服務提供者接口,服務提供者用來產生服務:
/*** * @author 胡龍海* 創建時間: 2017年4月4日* 服務接口*/ public interface Service {//Service方法.public void doService(); } /*** * @author 胡龍海* 創建時間: 2017年4月4日* 服務提供者接口*/ public interface Provider {public Service newService(); }緊接著是服務提供者接口的實現和服務接口的實現:
public class StrongProvider implements Provider{@Overridepublic Service newService() {return new StrongService();}} public class WeekProvider implements Provider{@Overridepublic Service newService() {return new WeekService();}} public class WeekService implements Service{@Overridepublic void doService() {System.out.println("弱爆了");}} public class StrongService implements Service{@Overridepublic void doService() {System.out.println("雙擊666");}}緊接著就是提供靜態工廠了,我們通過靜態工廠完成服務訪問API,服務提供者注冊API的編寫:
/*** 靜態工廠,提供服務* @author 胡龍海* 創建時間: 2017年4月4日*/ public class Services {private Services(){} //保證該類是不可實例化的private static Map<String,Provider> providers=new HashMap<>();//一系列服務提供者private static String DEFAULT_PROVIDER_NAME="<def>";/*** 提供者注冊API.(默認)* @author 胡龍海* 創建時間: 2017年4月4日* @param provider*/public static void registDefaultProvider(Provider provider) {providers.put(DEFAULT_PROVIDER_NAME, provider);}/*** 提供者注冊API* @author 胡龍海* 創建時間: 2017年4月4日* @param providerName* @param provider*/public static void registProvider(String providerName,Provider provider) {providers.put(providerName, provider);}/*** 服務訪問API,默認* @author 胡龍海* 創建時間: 2017年4月4日* @return*/public static Service newService() {return providers.get(DEFAULT_PROVIDER_NAME).newService();}/*** 服務訪問API.* @author 胡龍海* 創建時間: 2017年4月4日* @param serviceName* @return*/public static Service newService(String serviceName) {return providers.get(serviceName).newService();} }接著,我們就可以建立代碼去測試了.可以去注冊幾個服務提供者,然后根據注冊時的名字完成對于服務的調用.
public class TestService {@Testpublic void testService() {Services.registProvider("week",new WeekProvider());Services.registProvider("strong", new StrongProvider());Services.registDefaultProvider(new StrongProvider());Services.newService().doService();Services.newService("week").doService();} }實際上,我們熟悉的JDBC編程就是基于這種服務提供者框架去實現的,其中Driver是服務提供者接口,Connection是服務接口,DriverManager.registDriver()是服務提供者注冊API,而DriverManager.getConnection()是服務訪問API.
轉載于:https://www.cnblogs.com/hlhdidi/p/6666254.html
總結
以上是生活随笔為你收集整理的静态工厂方法之服务提供者框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: textmetric结构
- 下一篇: P2597 [ZJOI2012]灾难(t