我需要創建一個 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
提交
取消