2015-02-10 45 views
1

如果我有一個需要幾個(4+參數)的不可變對象的構造函數,那麼具有包含所有必需參數的單個構造函數是正確的方法嗎?構造函數具有許多所需的參數

我覺得這會成爲Builder模式的候選人,但我也覺得自己不願意離開它,因爲參數是要求,而且當您選擇時,Builder似乎更適合。

我腦海中的例子是一個模型對象,一旦創建就不會改變。

+2

做任何參數自然適合作爲更大的東西的一部分? (例如,如果你有「名字,姓氏,地址1,地址2,地址3」,那麼這聽起來像你真的是「姓名」和「地址」。) – 2015-02-10 07:19:21

+0

如果你總是有這些參數定義在對象創建,然後我看不到一個單一的構造函數的問題。 – 2015-02-10 07:19:34

+0

@JonSkeet在這種情況下,參數或多或少都是細粒度的,但如果它們更相關,則會提出一個很好的觀點。 – 2015-02-10 07:22:58

回答

4

這兩個選項都有它們的缺點,正如你所建議的那樣。四個參數的構造函數很難正確使用,導致代碼難以閱讀。但是,它傳達了所有參數都是強制性的意圖。

構建器會更容易使用,並使代碼更易於閱讀,但傳達了參數是可選的意圖。

由於代碼經常被讀取而不是寫入,所以我建議在這種情況下使用提高可讀性的選項。去建設者,並確保所有參數在build()方法被調用失敗儘快使用生成器錯誤時驗證。使用javadoc來協助傳達所有參數是強制性的。

3

如果你想創建一個不可變的對象,你必須提供一個構造函數,其中包含所有必要的字段

你不能將狀態設置部分因爲以後你就必須加上「制定者」,這將通過定義添加可變性的一些概念。

生成器模式實際上是關於部分對象構建。

相關問題