一、靜態工廠和構造器共同缺點:安全
二、重疊構造器模式能夠部分解決上述問題,但遇到參數 太多 會使得客戶端代碼難以編寫、閱讀函數
- 一長串類型相同的參數,會致使微妙的錯誤
- 若有兩個點到順序,編譯器不報錯,運行時報錯,調試難度增長
三、簡化構造函數,採用setter方法:性能
- 這種模式 JavaBean 構造過程狀態不一致,調試更加困難
- 阻止了類作成 不可變類的可能<15條>
- 保證線程安全較難
![](http://static.javashuo.com/static/loading.gif)
四、Builder(構建器)模式:ui
客戶端利用全部參數調用構建器,相似setter方法設置相關參數:線程
- 客戶端能夠調用無參構造方法,生成不可變對象
- Builder 是構建類的靜態成員類<22條>
![](http://static.javashuo.com/static/loading.gif)
構建該類:調試
- 注意這裏 new NutritionFacts.Builder(240,8) 實例化的是內部靜態類Builder
- NutritionFacts類在最後的build()方法內實例化的
- 因此 NutritionFacts 類是不可變類沒問題
![](http://static.javashuo.com/static/loading.gif)
實例化外層類時,將builder的這些參數拷貝過去:對象
- 此時依然能夠在構建類中,檢驗參數的合法性
- 不合法,拋出 IllegalStateException 異常
- 也能夠在 setter 方法中檢驗,這樣不用等到實例化才報錯
![](http://static.javashuo.com/static/loading.gif)
五、Builder模式靈活性編譯器
- 能夠用來建立多個對象
- builder 的參數能夠在建立時調整,隨對象改變
- 也能夠自動填充某些域
六、設置了參數的 Builder 是一個很好的 抽象工廠it
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
Class.newInstance() 破壞了編譯時的異常檢查io
- Builder彌補了該不足
- newInstance老是企圖調用類的無參構造器
七、Builder模式不足:
- 建立對象前,先建立構建器,性能有些許損耗
- Builder模式比重疊構造器更冗長,故不少不少參數時才使用
END:
- 若是類包含多個參數,構建器Builder是不錯的選擇
- 特別是大多數參數是可選的時候
- 構建器比重疊構造器 易於閱讀
- 構建器比JavaBeans更加安全