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

2021-08-25 18:20:57 字數 1118 閱讀 5715

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

靜態工廠方法非設計模式中的靜態工廠方法,它通過是static的靜態方法生產相關的類的方法,例如:integer i = integer.valueof(1);他就是將1封裝成integer類的1(可能不說的不太對,大概因該是這個意思)

當然也可寫為integer i = new integer(1);

寫個最簡單的**演示下靜態工廠:

public static boolean valueof(boolean b)

但書中寫了4條方法寫了靜態工廠的優勢:

(1)靜態工廠方法與構造器不同的第一大優勢在於,它們有名稱。

根據不同需求可以起名為valueof、getinstance、newinstance、gettype、newtype等等

(2)不必在每次呼叫它們的時候都建立乙個新的物件

如果累世不可變類或者是singleton的類或者不可例項化的類,使用靜態工廠方法要比每次new個物件來得好得多(還有一點我不是太懂,書上原話是「它還使不可變的類(15條)可以確保不會存在兩個相等的例項,即當且僅當a==b的時候才有a.equals(b)為true,如果類保證了這一點,他的客戶端就可以使用==操作符來代替equals(object)方法,這樣可以提高效能,列舉(enum)型別(30條)保證了這一點」)

(3)他們可以返回型別的任何子型別的物件

使用者可以定義返回型別,我們不必一定返回乙個類,我們可以返回乙個它實現的乙個介面,在以後的如果想廢棄這個類換成其他的類,更換計較方便,舉個不恰當的例子,例如:list l = new arraylist();如果不想用arraylist想用linklist,只要修改乙個地方就行了,有點像介面程式設計。!

(4)它們使**變得更加簡潔

map> m = new hashmap>;

map> m = hashmap.newinstance();

二者誰簡單一眼就知道了

當然靜態工廠也有缺點:

(1)類如果不含共有的或者受保護的構造器,就不能被子類化

(2)它們與其他的靜態方法實際上沒有區別

[color=red]總之靜態工廠和構造器各有所長,在提供類的例項時,切記不可忘記靜態工廠。[/color]

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

獲取類的例項,類可以提供乙個公有的構造器,還可以提供乙個公有的靜態工廠方法 static factory method 它只是乙個返回類的例項的靜態方法。例如 public static boolean valueof boolean b 注意,這裡的靜態工廠方法與設計模式中工廠方法模式不同,使用靜...

第一條 用靜態工廠方法代替構造器

所謂靜態工廠方法,實際上只是乙個簡單的靜態方法,它返回的是類的乙個例項。特點就是構造方法是私有的。靜態工廠方法有四大優勢 優勢1.靜態工廠方法的名稱,因此比構造器更準確地描述返回的例項。public class randomintgenerator public static randomintge...

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

第1條 考慮用靜態工廠方法代替構造器 優點 1.靜態工廠方法有名稱 2.不必每次呼叫的時候都建立乙個新的物件 3.可以返回型別的任何子型別的物件 4.在建立引數化型別例項的時候,使 更加簡潔 缺點 1.類如果不含有共有的或者受保護的構造器,就不能被子類化 2.與其他的靜態方法實際上沒有任何區別 pu...