具有许多必需参数的构造函数

3
如果我有一个需要多个参数(4+)的不可变对象的构造函数,是否使用具有所有必需参数的单个构造函数是正确的方法?
我觉得这成为了Builder模式的候选,但我也感觉要避免它,因为这些参数是必需的,当您可以挑选和选择时,Builder似乎更合适。
我心中的例子是一个一旦创建就不会改变的模型对象。

2
有没有任何参数自然地组合在一起,作为更大的整体的一部分?(例如,如果你有“FirstName,LastName,Address1,Address2,Address3”,那么这听起来像是你真正拥有了“Name”和“Address”。) - Jon Skeet
如果您在对象创建时始终定义这些参数,那么我认为单个构造函数没有问题。 - PM 77-1
@JonSkeet 如果它们更相关,那么在这种情况下参数的粒度就更好了,但你提出了一个很好的观点。 - Adam Alyyan
2个回答

5
如果你想创建一个不可变对象,你必须提供一个包含所有必要字段的构造函数你不能部分设置状态,因为之后你将不得不添加一些“setter”的概念,这在定义上会增加可变性
建造者模式实际上是关于部分对象构建的。

4
两个选项都有缺点,正如您所指出的。一个具有四个参数的构造函数难以正确使用并使代码难以阅读。但是,它传达了所有参数都是必需的意图。
建造者模式更易于使用和阅读代码,但是表明参数是可选的意图。
由于代码更常被读取而不是编写,我建议在这种情况下使用促进可读性的选项。选择建造者,并确保在调用build()方法时验证所有参数,以便在错误使用建造者时尽快失败。使用javadoc来帮助传达所有参数都是必需的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接