備忘錄模式提供了一種彌補真實世界缺陷的方法,讓“後悔藥”在程式世界中可行,其定義如下:
Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored
to this state later.
在不破壞封裝性的前提下,捕獲一個對象的内部狀态并在該對象之外儲存這個狀态。這樣以後就可将該對象恢複到原先儲存的狀态。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM3YjZhBTY0EmZjhTN4YmN2QDM3UGOiZmZ2gzYiJDN08CXwIzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
類圖中的三個角色:
1.Originator發起人角色:記錄目前時刻的内部狀态,負責定義哪些屬于備份範圍的狀态,負責建立和恢複備忘錄資料
2.Memento備忘錄角色:負責存儲Originator發起人對象的内部狀态,在需要的時候提供發起人需要的内部狀态。
3.Caretaker備忘錄管理者角色:對備忘錄進行管理,儲存和提供備忘錄
備忘錄模式的使用場景
1.需要儲存和恢複資料的相關狀體場景
2.提供一個復原的操作;比如Word中的CTRL+Z組合鍵
3.需要監控的副本場景中。例如要監控一個對象的屬性,但是監控又不應該作為系統的主業務來調用,它隻是邊緣應用,即使出現監控不
準,錯誤報警也影響不大,是以一般的做法是備份一個主線程中的對象,然後又分析程式來分析
4.資料連接配接的事務管理就是用的備忘錄模式