第2條 遇到多個構造器參數時要考慮構建器

假如,對於這樣的類,屬性多達10多個,有如下幾種處理方式。安全

處理方式1:ui

通常來講,咱們大多采用重疊構造器模式,在這種模式下,提供一個只有必要參數的構造器,第二個構造器有一個可選參數,第三個有兩個可選參數,............以此類推,最後一個包含全部可選參數。對象

這個構造器許多你本不想傳值的參數,還不得不爲它們傳值,若是「僅僅」是這6各參數,看起來還不算糟糕,問題是隨着參數的增長,他很快就失去了控制。it

遇到這種許多構造器參數的時候,還有第二種辦法 即JavaBean是模式,在這種模式下,調用一個無參構造器來建立對象。方法

其客戶端調用方法以下:im

可是這種模式也有缺點,JavaBeans模式自己就有很嚴重的問題,由於構造過程被分到了幾個調用中,在構造過程當中JavaBeans可能處於不一致的狀態。類沒法經過僅僅經過檢驗構造器參數的有效性來保證一致性。客戶端

其實這種方式,我的以爲很噁心,客戶端須要寫不少的代碼。img

幸運的是還有第三種替代方法,即能保證安全性,又能夠保證良好的可讀性。這就是Builder模式,代碼以下:安全性

客戶端調用方法:build

這樣的客戶端很容易編寫,更爲重要的是,易於閱讀。與構造器相比,builder的優點在於,builder能夠有多個可變參數,構造器就像方法同樣,只有一個可變參數。由於builder利用單獨的方法來設置每一個參數,你想要多少個,它們就能夠有多少個,直到每一個setter方法都有一個可變參數。

相關文章
相關標籤/搜索