C Chapter14 備忘錄模式

2021-05-22 20:26:42 字數 1246 閱讀 8961

備忘錄(memento)模式:

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。

把儲存的細節給封裝在了memento中了,任何時候要更改儲存的細節也不用影響客戶端了。

memento模式比較適合用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分時,originator可以根據儲存的memento資訊還原到前一狀態。如果在某個系統中使用命令模式時,需要實現命令的撤銷功能,那麼命令模式可以使用備忘錄模式來儲存可撤銷操作的狀態。使用備忘錄可以把複雜的物件內部資訊對其他的物件遮蔽起來。當角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時儲存起來的備忘錄將狀態恢復。

實際應用(工程結構)

(1)發起人 gameplayer.h

(2)備忘錄 playerstatebackup.h

(3)管理者 playerstatemanager.h

(1)發起人 gameplayer.h

(2)備忘錄 playerstatebackup.h

(3)管理者 playerstatemanager.h

//#include "stdafx.h"

#include "gameplayer.h"

#include "playerstatemanager.h"

void freeptr(void* vptr)

}int _tmain(int argc, _tchar* argv)

// 儲存進度。由於封裝在playerstatebackup中,因此我們並不知道儲存了哪些具體的角色資料

playerstatemanager* pplayermanager = null;

pplayermanager = new playerstatemanager();

if (null != pplayermanager)

if (null != psupermario && null != pplayermanager)

system("pause");

freeptr(pplayermanager);

freeptr(psupermario);

return 0;}

備忘錄模式

備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...