備忘錄模式 Memento

2021-10-04 06:04:39 字數 1235 閱讀 7201

備忘錄模式又叫做快照模式,該模式將當前物件的內部狀態儲存到備忘錄中,以便在需要時能將物件的狀態恢復到原先儲存的狀態。備忘錄模式提供了一種儲存和恢復狀態的機制,常用於快照的記錄和狀態的儲存,在系統發生故障或資料發生不一致時能夠方便地將資料恢復到某個歷史狀態。

備忘錄的核心是設計備忘錄類及用於管理備忘錄的管理者類,主要角色如下:

發起人originator

記錄當前時刻的內部狀態,定義建立備忘錄和恢復備忘錄資料的方法

備忘錄memento

負責儲存物件的內部狀態

狀態管理者storage

對備忘錄的歷史狀態進行儲存,定義了儲存和獲取備忘錄狀態的功能。注意備忘錄只能被儲存或恢復,不能進行修改。

(1)定義原始資料original

public class original 

public void setvalue(string value)

public memento creatememento()

public void restorememento(memento memento)

}

(2)定義備忘錄memento

public class memento 

public string getvalue()

public void setvalue(string value)

}

(3)定義備忘錄管理者storage

public class storage 

public memento getmemento()

public void setmemento(memento memento)

}

以上**定義了備忘錄管理者,持有備忘錄例項,並提供了set/get方法用來設定和獲取備忘錄資料。

(4)使用備忘錄

public static void main(string args)
備忘錄的使用方法比較簡單,先定義乙個原始資料,然後將資料存到storage,這時可以修改資料,在我們想把資料恢復時,呼叫原始類的restorememento方法即可。執行結果如下:

備忘錄模式(Memento)

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

Memento 備忘錄模式

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

備忘錄模式(Memento)

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