我需要创建一个 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个赞
可选选项,保存变化
想象一些更多(可选)选项。然后需要几个构造函数,或者一个具有多个创建方法的工厂。
使用的构建器模式允许具有可变字段,下一个选项仍可能以某种方式改变。在创建时,生成的类只有不可变的最终字段。
许多参数的清晰度
另外请注意,对于许多选项,构建器模式会为每个选项命名;相比:
.withX(y).withY(x)
和
(y, x)
(就像工厂一样。)隐藏确切的实现子类 [不是这里的情况]
另一种用法是由构建器返回派生类,实际上隐藏了一个实现类。
慕容3067478
TA贡献1773条经验 获得超3个赞
好处是期权的数量在未来可能会增加。他们可能会考虑到这一点,因此他们从一开始就使用构建器模式,因为从工厂或构造器进行更改可能非常困难。
Joshua Bloch 在 Effective Java 的第二章(第 2 项)中很好地引用了这个问题。
添加回答
举报
0/150
提交
取消