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