Memento 備忘錄模式

2021-07-24 16:27:45 字數 1635 閱讀 2979

備忘錄模式(memento pattern)儲存乙個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。

意圖:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。

主要解決:所謂備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態。

何時使用:很多時候我們總是需要記錄乙個物件的內部狀態,這樣做的目的就是為了允許使用者取消不確定或者錯誤的操作,能夠恢復到他原先的狀態,使得他有"後悔藥"可吃。

如何解決:通過乙個備忘錄類專門儲存物件狀態。

關鍵**:客戶不與備忘錄類耦合,與備忘錄管理類耦合。

應用例項:1、後悔藥。2、打遊戲時的存檔。3、windows 裡的 ctri + z。4、ie 中的後退。4、資料庫的事務管理。

優點:1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。2、實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。

缺點:消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。

注意事項:1、為了符合迪公尺特原則,還要增加乙個管理備忘錄的類。2、為了節約記憶體,可使用原型模式+備忘錄模式。

備忘錄模式使用三個類 memento、originator 和 caretaker。memento 包含了要被恢復的物件的狀態。originator 建立並在 memento 物件中儲存狀態。caretaker 物件負責從 memento 中恢復物件的狀態。

mementopatterndemo,我們的演示類使用 caretaker 和 originator 物件來顯示物件的狀態恢復。

備忘錄模式(Memento)

主要目的是儲存乙個物件的某個狀態,以便在適當的時候恢復物件,個人覺得叫備份模式更形象些,通俗的講下 假設有原始類a,a中有各種屬性,a可以決定需要備份的屬性,備忘錄類b是用來儲存a的一些內部狀態,類c呢,就是乙個用來儲存備忘錄的,且只能儲存,不能修改等操作。做個圖來分析一下 original類是原始...

Memento 備忘錄模式

定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。案例 比如現在有乙個繪圖系統,我們在viewer裡面畫了一些圖形,但是在繪製的過程中可能畫出的影象不是想要的,這時候需要到正確的繪製狀態,這時候可以在每次繪製的時候儲存繪製的狀...

備忘錄模式(Memento)

1.目的 如果某個物件 gamerole 需要儲存其狀態 資料 為了不對外暴露資料,它可以自己封裝乙個類 memento 裡面包含其感興趣的資料,當需要儲存時,使用自己的資料生成乙個memento的物件,並將其儲存在caretaker中,當需要reload狀態時,從caretaker中取回memen...