一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器
生活随笔
收集整理的這篇文章主要介紹了
一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、靜態(tài)工廠方法相較于構(gòu)造器的優(yōu)點(diǎn)
a、靜態(tài)工廠方法能夠自定義名稱,使代碼可讀性更高
b、不必在每次調(diào)用的時(shí)候都創(chuàng)建新的實(shí)例
c、可以返回類型的子類型對(duì)象
2、靜態(tài)工廠方法的常用名稱:
value
of
getInstance
newInstance
getType
newType
import java.util.HashMap; import java.util.Map;/*** @description: 用于提供服務(wù)者注冊(cè)API、服務(wù)訪問(wèn)API, 不可實(shí)例化 (類似JDBC中的Driver)* @author: huguanghui* @date: 2019-06-03 13:27*/ public class ServiceManager {//服務(wù)提供者緩存private static final Map<String, IProvider> providerMap = new HashMap<>();//默認(rèn)服務(wù)提供者名稱private static final String DEFAULT_PROVIDER_NAME = "def";//私有化構(gòu)造器private ServiceManager() {}/*** 注冊(cè)服務(wù)提供者** @param providerName* @param provider*/public static void registerProvider(String providerName, IProvider provider) {providerMap.put(providerName, provider);}public static void registerDefaultProvider(IProvider provider) {providerMap.put(DEFAULT_PROVIDER_NAME, provider);}/*** 獲取服務(wù)訪問(wèn)實(shí)例** @param providerName* @return*/public static IService getInstance(String providerName) {IProvider provider = providerMap.get(providerName);if (provider == null) {throw new IllegalArgumentException("未找到相應(yīng)的服務(wù)提供者:" + providerName);}return provider.newService();}public static IService getInstance() {return getInstance(DEFAULT_PROVIDER_NAME);} } /*** @description: 服務(wù)接口 (類比于JDBC中的Connection類)* @author: huguanghui* @date: 2019-06-03 13:27*/ public interface IService {void doSomeService(); } /*** @description: 服務(wù)提供者接口 (類似JDBC中的Driver)* @author: huguanghui* @date: 2019-06-03 13:27*/ public interface IProvider {IService newService(); }
a、靜態(tài)工廠方法能夠自定義名稱,使代碼可讀性更高
b、不必在每次調(diào)用的時(shí)候都創(chuàng)建新的實(shí)例
c、可以返回類型的子類型對(duì)象
2、靜態(tài)工廠方法的常用名稱:
value
of
getInstance
newInstance
getType
newType
import java.util.HashMap; import java.util.Map;/*** @description: 用于提供服務(wù)者注冊(cè)API、服務(wù)訪問(wèn)API, 不可實(shí)例化 (類似JDBC中的Driver)* @author: huguanghui* @date: 2019-06-03 13:27*/ public class ServiceManager {//服務(wù)提供者緩存private static final Map<String, IProvider> providerMap = new HashMap<>();//默認(rèn)服務(wù)提供者名稱private static final String DEFAULT_PROVIDER_NAME = "def";//私有化構(gòu)造器private ServiceManager() {}/*** 注冊(cè)服務(wù)提供者** @param providerName* @param provider*/public static void registerProvider(String providerName, IProvider provider) {providerMap.put(providerName, provider);}public static void registerDefaultProvider(IProvider provider) {providerMap.put(DEFAULT_PROVIDER_NAME, provider);}/*** 獲取服務(wù)訪問(wèn)實(shí)例** @param providerName* @return*/public static IService getInstance(String providerName) {IProvider provider = providerMap.get(providerName);if (provider == null) {throw new IllegalArgumentException("未找到相應(yīng)的服務(wù)提供者:" + providerName);}return provider.newService();}public static IService getInstance() {return getInstance(DEFAULT_PROVIDER_NAME);} } /*** @description: 服務(wù)接口 (類比于JDBC中的Connection類)* @author: huguanghui* @date: 2019-06-03 13:27*/ public interface IService {void doSomeService(); } /*** @description: 服務(wù)提供者接口 (類似JDBC中的Driver)* @author: huguanghui* @date: 2019-06-03 13:27*/ public interface IProvider {IService newService(); }
?github源碼連接
?
轉(zhuǎn)載于:https://www.cnblogs.com/sanbanfu/p/10967985.html
總結(jié)
以上是生活随笔為你收集整理的一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js 图片压缩上传(base64位)以及
- 下一篇: 阶段1 语言基础+高级_1-3-Java