大話設計模式 讀書筆記備忘錄模式

2021-08-21 16:24:58 字數 1159 閱讀 8445

以儲存遊戲為例,在玩魂斗羅之前,一般在快到boss的時候,我會先儲存遊戲的狀態。與boss作戰時萬一遊戲掛了。可以利用備忘錄恢復到戰前狀態了。

備忘錄模式:獲取乙個物件的某個狀態,並且在物件之外儲存,使得在需要的情況下恢復物件。(不會破壞封裝性) 又叫做快照模式(snapshot pattern)或者token模式,是23種設計模式之一

originator(發起人):負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。originator可以根據需要決定memento儲存自己的哪些內部狀態。

memento(備忘錄):負責儲存originator物件的內部狀態,並可以防止originator以外的其他物件訪問備忘錄。備忘錄有兩個介面:caretaker只能看到備忘錄的窄介面,他只能將備忘錄傳遞給其他物件。originator卻可看到備忘錄的寬介面,允許它訪問返回到先前狀態所需要的所有資料。

caretaker(管理者):負責備忘錄memento,不能對memento的內容進行訪問或者操作。

角色職責

發起人

- 建立乙個含有當前的內部狀態的備忘錄物件

- 使用備忘錄物件儲存內部狀態

負責人 管理者

- 負責儲存備忘錄物件

- 不檢查備忘錄物件的內容

優點

1. 給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。 

2. 實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。

缺點

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

1、後悔藥。

2、打遊戲時的存檔。

3、windows 裡的 ctri + z。

4、ie 中的後退。

5、資料庫的事務管理。

總之是一些需要儲存/恢復資料地相關狀態場景,以及需要提供乙個可回滾地操作。

注意事項

1、為了符合迪公尺特原則,還要增加乙個管理備忘錄的類。 

2、為了節約記憶體,可使用原型模式+備忘錄模式。

github

備忘錄模式

大話設計模式讀書筆記之備忘錄模式

1.定義 memento,在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。如遊戲中的恢復到某一關卡 2.uml 類圖 解釋說明 originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可使...

大話設計模式 備忘錄模式

一 備忘錄模式 在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。二 示例 data public class memento data public class originator public void setmemento ...

大話設計模式之備忘錄模式

備忘錄模式就是把乙個狀態儲存在乙個類當中,需要用的時候,拿出來。例子如下 主介面類 一共有四個類 主角類originator記錄主角基本資訊,記憶類memento,管理者類caretaker,主函式類main package mementopattern public class main publ...