備忘錄模式

2021-10-23 00:19:50 字數 2026 閱讀 2556

定義

備忘錄(memento)模式的定義:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,以便以後當需要時能將該物件恢復到原先儲存的狀態。該模式又叫快照模式。

角色

結構圖:

備忘錄模式的主要角色如下。

實現

發起人

public

class

originator

public

void

setstate

(string state)

public memento creatememento()

public

void

restorememento

(memento memento)

}備忘錄

public

class

memento

public string getstate()

public

void

setstate

(string state)

}管理者

public

class

caretaker

public

void

setmemento

(memento memento)}測試

public

class

client

}

輸出:

如果要儲存或恢復前面好幾次的操作,可以將管理類使用棧來儲存。

public

class

caretaker

public

void

setmemento

(memento memento)

}

優缺點優點

缺點:資源消耗過大,如果類的成員變數太多,就不可避免占用大量的記憶體,而且每儲存一次物件的狀態都需要消耗記憶體資源。

模式擴充套件

備忘錄模式可以和原型模式配合使用。在備忘錄模式中,通過定義「備忘錄」來備份「發起人」的資訊,而原型模式的 clone() 方法具有自備份功能,所以,如果讓發起人實現 cloneable 介面就有備份自己的功能,這時可以刪除備忘錄類,其結構圖如圖 4 所示。

//發起人原型

public

class

originatorprototype

implements

cloneable

public

void

setstate

(string state)

public originatorprototype creatememento()

public

void

restorememento

(originatorprototype ori)

public originatorprototype clone()

catch

(clonenotsupportedexception e)

return null;}}

//管理者

public

class

prototypecaretaker

public

void

setmemento

(originatorprototype ori)

}//客戶端

public

class

client

}

備忘錄模式

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

備忘錄模式

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

備忘錄模式

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