🎯 什麼情境該想到我

當你「想在某個時間點把一個物件的內部狀態拍成快照,之後能把它還原回這個狀態,卻又不想把它的內部細節暴露出去」的時候(例如 undo、存檔/讀檔、交易回滾前的狀態保存)。

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

意圖:在不破壞封裝的前提下,擷取並外部化一個物件的內部狀態,以便日後可以把該物件還原到此狀態。

主要參與者 / 結構:

  • Originator(原發者):知道自己的內部狀態,能建立備忘錄保存目前狀態,也能用備忘錄還原自己。
  • Memento(備忘錄):儲存 Originator 的內部狀態;只對 Originator 開放內容,對外是不透明的。
  • Caretaker(管理者):負責保管備忘錄(例如放進歷史堆疊),但不讀、不改它的內容。

做法要點:

  1. Originator 在需要時 createMemento(),把目前狀態封進一個備忘錄。
  2. Caretaker 把備忘錄收好(不窺探內容),需要時再交回。
  3. 要還原時,Originator 接受一個備忘錄並 restore() 回該狀態。
  4. 關鍵在於:只有 Originator 能存取備忘錄的內部,封裝不被破壞。

🧪 我實際套用的紀錄

  • (待填)

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

  • 狀態很大或快照很頻繁時,保存多份備忘錄的記憶體成本很高。
  • Caretaker 要管理備忘錄的生命週期(何時丟棄),否則歷史會無限累積。
  • 若語言難以真正隱藏備忘錄內部,封裝保護會打折扣。

🔗 相關工具