備忘錄,在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。該模式很好理解,其uml圖如下:
在originator中提供了建立memento的介面,具體要儲存什麼樣的內容,則根據需求來定。而caretaker則是負責管理memento。而儲存的內容的具體的組織方式什麼的都封裝在memento中了。這樣做耦合性很低,方便維護和擴充套件。示例**如下:
// memomodel.h檔案
#pragma once
#include
#include
class
memo
;class
originator
void
setstate
(std::string str)
void
recoverstate
(memo * p);}
;class
memo};
memo * originator::
creatememo()
void originator::
recoverstate
(memo * p)
class
caretaker
~caretaker()
memo *
getmemo()
void
setmemo
(memo * p)
};
測試**如下:
#include
#include
"memomodel.h"
intmain()
測試結果如下圖:
備忘錄模式把要儲存的細節封裝在了memo類中,如果要修改儲存細節的話,不會影響到客戶端。備忘錄模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分時。
c 設計模式之備忘錄模式
備忘錄模式memento pattern 定義 備忘錄模式,是行為模式之一,它的作用是儲存物件的內部狀態,並在需要的時候 undo rollback 恢復到以前的狀態。備忘錄模式的類結構圖 備忘錄模式的角色 1.originator 發起者 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內...
設計模式之備忘錄模式
機器 public class machine public void startplay disc.setluminance 60 disc.settime 0 disc.setvolume 80 public void stopplay disc.setluminance 70 disc.set...
設計模式之備忘錄模式
定義 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。備忘錄模式有三個角色 以儲存遊戲進度為例,退出遊戲前存檔,再進入遊戲就會顯示退出之前的狀態。示例 遊戲發起人類 public class game public state cr...