獲取類的例項,類可以提供乙個公有的構造器,還可以提供乙個公有的靜態工廠方法(static factory method),它只是乙個返回類的例項的靜態方法。例如:
public static boolean valueof(boolean b)
注意,這裡的靜態工廠方法與設計模式中工廠方法模式不同,使用靜態工廠方法有如下的優勢和劣勢
1.它們有名稱。便於使用和閱讀,當乙個類需要多個帶有相同簽名的構造器,用靜態工廠方法代替構造器,並慎重地選擇名稱以便突出它們之間的區別。
2.不必在每次呼叫它們的時候都建立乙個新的物件。
3.它們可以返回原返回型別的任何子型別的物件。
4.在建立引數化型別例項的時候更加簡潔。型別推導(type inference),例如:
map> m = new hashmap>();
如何引數型別較多,就會很複雜,可以提供乙個靜態工廠
public static hashmapnewinstance()
就可以這樣呼叫
map> m = hashmap.newinstance();
1.類如果不含公有的或者受保護的構造器,就不能被子類化
2.它們與其它的靜態方法實際上沒有任何區別
靜態工廠一些慣用的名稱:
靜態工廠方法和公有構造器都各有用處,我們需要理解它們各自的長處。靜態工廠通常更加適合,因此可以優先考慮靜態工廠。
第一條 考慮用靜態工廠方法代替構造器
第一條 考慮用靜態工廠方法代替構造器 靜態工廠方法非設計模式中的靜態工廠方法,它通過是static的靜態方法生產相關的類的方法,例如 integer i integer.valueof 1 他就是將1封裝成integer類的1 可能不說的不太對,大概因該是這個意思 當然也可寫為integer i n...
第一條 用靜態工廠方法代替構造器
所謂靜態工廠方法,實際上只是乙個簡單的靜態方法,它返回的是類的乙個例項。特點就是構造方法是私有的。靜態工廠方法有四大優勢 優勢1.靜態工廠方法的名稱,因此比構造器更準確地描述返回的例項。public class randomintgenerator public static randomintge...
第1條 考慮用靜態工廠方法代替構造器
第1條 考慮用靜態工廠方法代替構造器 優點 1.靜態工廠方法有名稱 2.不必每次呼叫的時候都建立乙個新的物件 3.可以返回型別的任何子型別的物件 4.在建立引數化型別例項的時候,使 更加簡潔 缺點 1.類如果不含有共有的或者受保護的構造器,就不能被子類化 2.與其他的靜態方法實際上沒有任何區別 pu...