2015-02-10 70 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

如果你想创建一个不可变的对象,你必须提供一个构造函数,其中包含所有必要的字段

你不能将状态设置部分因为以后你就必须加上“制定者”,这将通过定义添加可变性的一些概念。

生成器模式实际上是关于部分对象构建。

相关问题