第1條 考慮用靜態工廠方法代替構造器

對於類而言,爲了讓客戶端獲取自身的一個實例,最經常使用的就是提供一個共有的構造器。還有一種方法,也應該佔有一席之地,它就是靜態工廠方法
spa

下面就介紹一下靜態工廠方法與構造器的區別設計

優勢:對象

1,靜態工廠方法有名稱,若是構造器的參數自己沒有明確的描述正被返回的對象,那麼具備適當名稱的靜態工廠會更容易使用。接口

2,靜態工廠方法,沒必要再每次調用的時候都建立一個新的對象。it

3,靜態工廠方法,能夠返回原返回類型的任何子類型的對象。(這種靈活的應用就是,API接口,API能夠返回對象,同時又不會使對象的類變成公有的。)map

4,在建立參數化類型實例的時候,使代碼變得更加簡潔。方法

例如,Map<String, Map<String, String>> map=new HashMap<String, Map<String,String>>();經驗

當參數類型變得愈來愈長,越複雜的時候,若是有靜態工廠方法,能夠明朗不少。客戶端

public static <K,V> HashMap<K, V> newInstance(){static

return new HashMap<K, V>();

}

這樣調用端是否是就很方便了,只要傳具體的參數類型就能夠了。

Map<String, Map<String, String>> map=HashMap.newInstance();

總之,有些規則不會百分之百適用於任什麼時候刻和任何場合,可是它們確實體現了絕大多數狀況下的最佳設計經驗。你沒必要盲目的聽從這些規則,只有首先學會這些規則,而後才能知道何時能夠打破這些規則。


缺點:

1,與其餘的靜態方法實際上沒有任何的區別。

2,類若是不含公有的或者受保護的構造器,就不能被實例化。

簡而言之,靜態工廠方法和公有構造器各有用處,咱們須要理解它們各自的好處,靜態工廠一般會更加合適,所以切忌第一反應就是提供公有的構造器,而不優先考慮靜態工廠。

相關文章
相關標籤/搜索