为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不直接使用构造函数?

为什么不直接使用构造函数?

智慧大石 2022-07-14 10:31:45
我需要创建一个 ScanOptions 的实例。正确的代码如下。String pattern = "mykeyprefix_*";Long cnt = 2000L;ScanOptions options = ScanOptions.scanOptions().match(pattern).count(cnt).build();我的问题是为什么不直接使用构造函数来创建对象?scanOptions = new ScanOptions(parttern, cnt);还是使用对象工厂创建实例?options = ScanOptionsFactory.create(parttern, cnt);那么将代码设计为第一种情况有什么好处吗?你能详细解释一下吗?非常感谢!这是弹簧源代码:org.springframework.data.redis.core.ScanOptions
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

  1. 可选选项,保存变化

想象一些更多(可选)选项。然后需要几个构造函数,或者一个具有多个创建方法的工厂。

使用的构建器模式允许具有可变字段,下一个选项仍可能以某种方式改变。在创建时,生成的类只有不可变的最终字段。

  1. 许多参数的清晰度

另外请注意,对于许多选项,构建器模式会为每个选项命名;相比:

.withX(y).withY(x)

(y, x)
  1. (就像工厂一样。)隐藏确切的实现子类 [不是这里的情况]

另一种用法是由构建器返回派生类,实际上隐藏了一个实现类。


查看完整回答
反对 回复 2022-07-14
?
慕容3067478

TA贡献1773条经验 获得超3个赞

好处是期权的数量在未来可能会增加。他们可能会考虑到这一点,因此他们从一开始就使用构建器模式,因为从工厂或构造器进行更改可能非常困难。

Joshua Bloch 在 Effective Java 的第二章(第 2 项)中很好地引用了这个问题。


查看完整回答
反对 回复 2022-07-14
  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信