??看到靜態工廠方法,我首先想到的就是java設計模式中的工廠模式,相信很多人都和我一樣,但是在書中很明確的說明:
注意,靜態工廠方法與設計模式中的工廠方法模式不同。本條目中所指的靜態工廠方法并不直接對應于設計模式中的工廠方法。
??靜態工廠方法替代構造器的優勢:
他們有名稱 ??例如:BigInteger(int,int,Random)返回的BigInteger可能為素數,如果采用BigInteger.PRobablePrime的靜態工廠方法來表示,更加的清晰明了。 ?? 一個類只能有一個帶有指定簽名的構造器。要想避開這個,無非就是讓參數列表在順序上有所不同,而這就會導致程序員面對這樣的API時,很難將其記住,從而導致誤操作。 ??由于靜態工廠方法能夠明確的對其進行區分,就不會造成這種誤操作。
不必在每次調用他們的時候都創建一個新對象
避免創建不必要的重復對象,提升性能嚴格控制在某個時刻哪些實例應該存在實例受控可以確保它是一個Singleton或者不可實例化的不可變類可以確保不會存在兩個相等的實例,即當且僅當a==b時才有a.equals(b)為true如果確保上述一點,則可以利用==來代替equals提升性能枚舉類型保證了這一點。它們可以返回原返回類型的任何子類型對象 ??想必這個就不用多說了,子要是子類型的都可以返回。
在創建參數化類型實例的時候,它們使代碼變得更加簡介Map<String,List<String>> m = new HashMap<String,List<String>>();??簡化版本
public static <K,V> HashMap<K,V> newInstance(){ retrun new HashMap<K,V>();}??靜態工廠方法替代構造器的缺點
類如果不含有公有的或者受保護的構造器,就不能被子類化他們與其他的靜態方法實際上沒有任何區別:
新聞熱點
疑難解答