備忘錄模式

2021-07-25 14:35:05 字數 2016 閱讀 3115

備忘錄模式:又叫做快照模式,屬於行為模式的一種,指在不破壞封裝性的前提下,獲取到乙個物件的內部狀態,並在物件之外記錄或儲存這個狀態。在有需要的時候可將該物件恢復到原先儲存的狀態。我們相當於把物件原始狀備份保留,所以叫備忘錄模式。

首先看一下備忘錄模式的uml圖:

備忘錄模式主要包含:發起者物件(originator)、備忘錄(memento)和管理者角色(caretaker)三部分組成。

發起者物件:負責建立乙個備忘錄來記錄當前物件的內部狀態,並可使用備忘錄恢復內部狀態。

.備忘錄物件:負責儲存發起者物件的內部狀態,並防止其他物件訪問備忘錄。

管理者物件:負責備忘錄許可權管理,不能對備忘錄物件的內容進行訪問或者操作。

在備忘錄模式中caretaker負責把originator進行備份,在需要的時候originator可以使用caretaker中儲存的originator進行恢復,originator的各種狀態就可以恢復到修改之前的狀態。

發起者物件

public

class memorole

public

memorole()

public

intgetusetime()

public

void

setusetime(int usetime)

public string getdevicename()

public

void

setdevicename(string devicename)

public

intgetstatelevel()

public

void

setstatelevel(int statelevel)

public memobean creatememoobject()

public

void

setmemento(memobean memento)

public

void

getcurrentstate()

}

備忘錄物件類

public

class memobean

public

void

setusetime(int usetime)

public string getdevicename()

public

void

setdevicename(string devicename)

public

intgetstatelevel()

public

void

setstatelevel(int statelevel)

}

備忘錄管理物件

public

class memomanager

public

void

setmemento(memobean memento)

}

客戶端測試類:

public

class test

}

優點:

1、備忘錄模式可以把發起人內部資訊物件遮蔽起來,從而可以保持封裝的邊界。

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

缺點:

1、如果狀態需要完整地儲存到備忘錄物件中,那麼在資源消耗上面備忘錄物件比較昂貴。

2、當發起者物件的狀態改變的時候,有可能這個協議無效。如果狀態改變的成功率達不到要求,可以考慮採取「假如」協議模式。

適用場合:

備忘錄模式

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

備忘錄模式

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

備忘錄模式

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