亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不直接使用構造函數?

為什么不直接使用構造函數?

智慧大石 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 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號