對付多參的建構,特别是一些必選,一些可選的時候我們一般有如下的解決辦法。
比如抽象一個裝機的類, cpu,記憶體,主機闆,硬碟是必選的,但是顯示卡,聲霸卡,固态硬碟是可選的。
為了對付各種各樣的裝機需求。我們一般有如下辦法:
1. 重載構造器
這樣可能會需要多個構造器,可讀性不好。
2. 用javabean模式的set方法。
這種可讀性要好很多,但是其能夠在運作期間随意的修改,不能夠保持狀态,不能夠通過對構造參數的校驗來避免問題,并且還會給線程同步帶來麻煩。
3. 就是使用建構器了,看如下的代碼:
這樣computer可以用如下的代碼構造:
這樣帶來的好處為
1. 既能想構造器那樣安全,又能有比較好的可讀性,如soliddisk一看就知道是給固态硬碟來指派的。
2. 讓可選參數傳回builder本身,還模拟了具名參數,更加可讀
3. 可以加入更多的校驗
4. 更容易擴充,如果增加了新的參數,隻需要新增一個方法,而不是新增n個構造器