如果我有一个需要几个(4+参数)的不可变对象的构造函数,那么具有包含所有必需参数的单个构造函数是正确的方法吗?构造函数具有许多所需的参数
我觉得这会成为Builder模式的候选人,但我也觉得自己不愿意离开它,因为参数是要求,而且当您选择时,Builder似乎更适合。
我脑海中的例子是一个模型对象,一旦创建就不会改变。
如果我有一个需要几个(4+参数)的不可变对象的构造函数,那么具有包含所有必需参数的单个构造函数是正确的方法吗?构造函数具有许多所需的参数
我觉得这会成为Builder模式的候选人,但我也觉得自己不愿意离开它,因为参数是要求,而且当您选择时,Builder似乎更适合。
我脑海中的例子是一个模型对象,一旦创建就不会改变。
这两个选项都有它们的缺点,正如你所建议的那样。四个参数的构造函数很难正确使用,导致代码难以阅读。但是,它传达了所有参数都是强制性的意图。
构建器会更容易使用,并使代码更易于阅读,但传达了参数是可选的意图。
由于代码经常被读取而不是写入,所以我建议在这种情况下使用提高可读性的选项。去建设者,并确保所有参数在build()
方法被调用失败尽快使用生成器错误时验证。使用javadoc来协助传达所有参数是强制性的。
如果你想创建一个不可变的对象,你必须提供一个构造函数,其中包含所有必要的字段。
你不能将状态设置部分因为以后你就必须加上“制定者”,这将通过定义添加可变性的一些概念。
生成器模式实际上是关于部分对象构建。
做任何参数自然适合作为更大的东西的一部分? (例如,如果你有“名字,姓氏,地址1,地址2,地址3”,那么这听起来像你真的是“姓名”和“地址”。) – 2015-02-10 07:19:21
如果你总是有这些参数定义在对象创建,然后我看不到一个单一的构造函数的问题。 – 2015-02-10 07:19:34
@JonSkeet在这种情况下,参数或多或少都是细粒度的,但如果它们更相关,则会提出一个很好的观点。 – 2015-02-10 07:22:58