用静态工厂方法代替构造器
1、靜態(tài)工廠方法與構造器不同的第一大優(yōu)勢在于,它們有名稱。如果構造器的參數(shù)本身沒有確切地描述正被返回的對象,那么具有適當名稱的靜態(tài)工廠會更容易使用,產生的客戶端代碼也更易于閱讀。例如,構造器Biginteger (int , int, Random )返回的Biginteger 可能為素數(shù),如果用名為B 工ginteger.probablePrime 的靜態(tài)工廠方法來表示,顯然更為清楚。
2、一個類只能有一個帶有指定簽名的構造器。編程人員通常知道如何避開這一限制: 通過提供兩個構造器,它們的參數(shù)列表只在參數(shù)類型的順序上有所不同。實際上這并不是個好主意。面對這樣的AP I , 用戶永遠也記不住該用哪個構造器, 結果常常會調用錯誤的構造器。并且在讀到使用了這些構造器的代碼時,如果沒有參考類的文檔,往往不知所云。由于靜態(tài)工廠方法有名稱,所以它們不受上述限制。當一個類需要多個帶有相同簽名的構造器時,就用靜態(tài)工廠方法代替構造器,并且仔細地選擇名稱以便突出靜態(tài)工廠方法之間的區(qū)別。
3、靜態(tài)工廠方法與構造器不同的第二大優(yōu)勢在于,不必在每次調用它們的時候都創(chuàng)建一個新對象
4、靜態(tài)工廠方法與構造器不同的第三大優(yōu)勢在子,它們可以返回原返回類型的任何子類型的對象
5、靜態(tài)工廠的第四大優(yōu)勢在于,所返回的對象的類可以隨著每次調用而發(fā)生變化,這取決于靜態(tài)工廠方法的參數(shù)值
6、靜態(tài)工廠的第五大優(yōu)勢在于,方法返回的對象所屬的類,在編寫包含該靜態(tài)工廠方法的類時可以不存在
缺點
1、靜態(tài)工廠方法的主要缺點在子,類如果不含公有的或者受protected的構造器,就不能被子類化
2、靜態(tài)工廠方法的第二個缺點在于,程序員很難發(fā)現(xiàn)它們
from一一類型轉換方法,它只有單個參數(shù),返回該類型的一個相對應的實例,
例如:Dated= Date . from(instant) ;
?of — —聚合方法,帶有多個參數(shù),返回該類型的一個實例,把它們合并起來,例如:
Set<Rank> faceCards = EnumSet. of (JACK , QUEEN, KING];
?valueOf一一比from 和of 更煩瑣的一種替代方法,例如:
Biginteger prime = Biginteger.valueOf(Integer.MAX_VALUE);
instance 或者get Instance一-返回的實例是通過方法的(如有)參數(shù)來描述
的,但是不能說與參數(shù)具有同樣的值,例如:
StackWalker luke = StackWalker.getinstance(options);
create 或者newInstance一一才象instance 或者getinstence 一樣,但create
或者newInstance 能夠確保每次調用都返回一個新的實例,例如:
Object newArray = Array.newInstance(classObject, arrayLen );
?getType一像getInstance 一樣,但是在工廠方法處于不同的類中的時-候使用。Type 表示工廠方法所返回的對象類型,例如:
FileStore fs = Files.getFileStore(path];
D newType一象newInstance 一樣,但是在工廠方法處于不同的類中的時候使用
BufferedReader br 「= Files.newBufferedReader( path);
總結
以上是生活随笔為你收集整理的用静态工厂方法代替构造器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: manjaro 21.2.5安装deb包
- 下一篇: 遇到多个构造器参数时要考虑使用Build