備忘錄模式

2021-08-11 01:51:22 字數 1297 閱讀 3154

簡介

備忘錄模式:

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

構成

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

2.memento(備忘錄):負責儲存originator物件的內部狀態,並可以防止originator以外的其他物件訪問備忘錄。

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

常用的場景

需要提供儲存和恢復資料的相關狀態場景

提供乙個可回滾rollback操作

需要監控的副本場景。

資料庫連線的事務管理就是備忘錄模式

優點

1.有時一些發起人物件的內部資訊必須儲存在發起人物件以外的地方,但是必須要由發起人物件自己讀取,這時,使用備忘錄模式可以把複雜的發起人內部資訊對其他的物件遮蔽起來,從而可以恰當地保持封裝的邊界。

2.本模式簡化了發起人類。發起人不再需要管理和儲存其內部狀態的乙個個版本,客戶端可以自行管理他們所需要的這些狀態的版本。

3.當發起人角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時儲存起來的備忘錄將狀態復原。

缺點

1.如果發起人角色的狀態需要完整地儲存到備忘錄物件中,那麼在資源消耗上面備忘錄物件會很昂貴。

2.當負責人角色將乙個備忘錄 儲存起來的時候,負責人可能並不知道這個狀態會占用多大的儲存空間,從而無法提醒使用者乙個操作是否很昂貴。

3.當發起人角色的狀態改變的時候,有可能這個協議無效。如果狀態改變的成功率不高的話,不如採取「假如」協議模式。

注意事項測試**

#include 

#include

#include

using

namespace

std;

//備份類

class fmembook

;//管理類

class ftaker

;//發起者

class foriginbookwirte

;void main()

備忘錄模式

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

備忘錄模式

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

備忘錄模式

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