🎯 什麼情境該想到我

當「從頭建一個新物件」很花成本或很麻煩,你其實已經有一個現成的樣本、想直接照著它「複製一份」再改一改;或程式要到執行期才知道該生哪種物件、你不想為此堆一大票子類時。

⚙️ 怎麼用(步驟 / 公式)

  1. 意圖:用「複製一個既有實例(原型)」來建立新物件,而不是用 new 從頭建。
  2. 主要參與者Prototype(宣告 clone() 的介面)、ConcretePrototype(實作 clone、自我複製)、Client(拿著一個原型物件,需要新物件時呼叫它的 clone)。
  3. 做法:在 Prototype 介面宣告 clone(),由各 ConcretePrototype 自己複製自己回傳新實例;Client 只要持有原型、對它 clone() 即可拿到新物件,不需知道具體類別。
  4. 關鍵決定深淺複製:淺複製只複製參照、共用內部物件;深複製連內部物件一起複製。依需求選對,避免新舊物件意外共用狀態。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 物件內含循環參照深層巢狀結構時,clone()(尤其深複製)的實作很麻煩、容易出錯。
  • 該用深複製卻用了淺複製 → 新舊物件共用內部狀態,改一個動到另一個,是常見隱性 bug。
  • 物件本來就很好建、成本又低時,複製沒有明顯好處。

🔗 相關工具