我需要创建一个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);
那么设计代码作为第一种情况有什么好处?您能为我详细解释一下吗?非常感谢你!这是spring的源代码:
答案 0 :(得分:2)
想象更多(可选)选项。这样一来,将需要多个构造函数,或者一个具有多个create方法的工厂。
所使用的构建器模式允许具有可变字段,因此下一个选项可能仍会以某种方式更改。在创建时,产生的类只有不可变的final 字段。
还请注意,对于许多选项,构建器模式会为每个选项命名;比较:
.withX(y).withY(x)
使用
(y, x)
另一种用法是由构建器返回派生类,实际上隐藏了实现类。
答案 1 :(得分:2)
好处是,将来期权的数量可能会增加。他们可能会考虑到这一点,所以他们从一开始就使用了构建器模式,因为对工厂或构造函数的更改可能非常困难。
约书亚·布洛赫(Joshua Bloch)在《有效的Java》第二章(第2篇)中很好地提到了这个问题。