1.意圖 在布破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態。這樣以後就可以將對象恢復到原先保存的狀態。 2.別名 Token 3.動機 為了允許用戶取消不確定的操作或從錯誤中恢復過來,需要實現檢查點和取消機制,而要實現這些機制,必須將狀態信息保存在某處,這樣才能將對象恢復到 ...
1.意圖
在布破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態。這樣以後就可以將對象恢復到原先保存的狀態。
2.別名
Token
3.動機
為了允許用戶取消不確定的操作或從錯誤中恢復過來,需要實現檢查點和取消機制,而要實現這些機制,必須將狀態信息保存在某處,這樣才能將對象恢復到它們先前的狀態。備忘錄是一個對象,它存儲另一個對象在某個瞬間的內部狀態,而後者稱備忘錄的原發器。
4.適用性
- 必須保存一個對象在某個時刻的狀態,這樣以後需要時它才能恢復到先前的狀態。
- 如果一個用介面來讓其它對象直接得到這些狀態,將會暴露對象的實現細節並破壞對象的封裝性。
5.結構
6.效果
- 保持邊界封裝 使用備忘可以避免暴露一些只應由原發器管理卻又必須存儲在原發器之外的信息。
- 簡化了原發器 在其它保持封裝的性的設計中,Originator負責保持客戶請求過的內部狀態版本。
- 使用備忘錄可能代價很高 如果原發器在生成備忘錄時必須拷貝並存儲大量的信息,或者客戶非常頻繁地創建備忘錄和恢複原發器狀態,可能會導致非常大的開銷。
- 定義窄介面和寬介面。
- 維護備忘錄的潛在代價。