如果我有一个需要多个(4个以上参数)的不可变对象的构造函数,是否有一个构造函数具有所有必需参数的正确方法?
我觉得这会成为Builder模式的候选者,但我也想回避它,因为参数必需,并且当你选择时,Builder似乎更合适。
我脑海中的例子是一个模型对象,一旦创建就不会改变。
答案 0 :(得分:4)
正如你的建议,这两种选择都有其缺点。四参数构造函数很难正确使用并使代码难以阅读。但是,它传达了所有参数都是强制性的意图。
构建器更容易使用并使代码更易于阅读,但传达参数是可选的意图。
由于代码读取的次数多于写入次数,因此我建议使用在这种情况下提高可读性的选项。转到构建器并确保在错误地使用构建器时,在调用build()
方法失败时尽快验证所有参数。使用javadoc协助通信所有参数都是必需的。
答案 1 :(得分:3)
如果要创建不可变对象,必须提供包含所有必填字段的构造函数。
您无法将状态设置为部分,因为稍后您必须添加一些概念" setters"根据定义,会增加可变性。
构建器模式实际上是关于部分对象构建。