備忘錄(memento)模式:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,以便以後當需要時能將該物件恢復到原先儲存的狀態。
該模式又叫快照模式。
備忘錄模式是一種物件行為型模式,優點:
1、提供了一種可以恢復狀態的機制。
當使用者需要時能夠比較方便地將資料恢復到某個歷史的狀態。
2、實現了內部狀態的封裝。
除了建立它的發起人之外,其他物件都不能夠訪問這些狀態資訊。
3、簡化了發起人類。
發起人不需要管理和儲存其內部狀態的各個備份,所有狀態資訊都儲存在備忘錄中,並由管理者進行管理,這符合單一職責原則。
缺點:資源消耗大。
如果要儲存的內部狀態資訊過多或者特別頻繁,將會占用比較大的記憶體資源。
備忘錄模式的核心是設計備忘錄類以及用於管理備忘錄的管理者類。
備忘錄模式的主要角色:
1、發起人(originator)角色:記錄當前時刻的內部狀態資訊,提供建立備忘錄和恢復備忘錄資料的功能,實現其他業務功能,它可以訪問備忘錄裡的所有資訊。
2、備忘錄(memento)角色:負責儲存發起人的內部狀態,在需要的時候提供這些內部狀態給發起人。
3、管理者(caretaker)角色:對備忘錄進行管理,提供儲存與獲取備忘錄的功能,但其不能對備忘錄的內容進行訪問與修改。
圖1 備忘錄模式的結構圖
1、需要儲存與恢復資料的場景,如玩遊戲時的中間結果的存檔功能。
2、需要提供乙個可回滾操作的場景,如word、記事本、photoshop,eclipse等軟體在編輯時按ctrl+z組合鍵,還有資料庫中事務操作。
備忘錄模式中,有單狀態備份的例子,也有多狀態備份的例子。
備忘錄模式可以與原型模式混合使用。
在備忘錄模式中,通過定義「備忘錄」來備份「發起人」的資訊,而原型模式的clone()方法具有自動備份功能,所以,如果讓發起人實現cloneable介面就有備份自己的功能,這時可以刪除備忘錄類。其結構圖如圖2所示。
圖2 帶原型的備忘錄模式的結構圖
圖3 示例**結構
備忘錄角色:
package
com.example.designpattern.memento
;/**
* @author administrator
* @date 2020/8/5
* 備忘錄角色
* 負責儲存發起人角色的內部狀態
*/class
memento
public
memento
(string schedule)
public
string
getschedule()
public
void
setschedule
(string schedule)
}
發起人角色:
package
com.example.designpattern.memento
;/**
* @author administrator
* @date 2020/8/5
* 發起人角色
* 具有內部狀態,如遊戲進度
* 能夠將內部狀態建立乙個備忘錄物件進行儲存
*/class
gameoriginator
public
void
setschedule
(string schedule)
/** * 建立備忘錄/快照的方法
*/public
memento
creatememento()
/** * 恢復狀態
*/public
void
returnschedule
(memento m)
}
負責人/管理者角色:
package
com.example.designpattern.memento
;/**
* @author administrator
* @date 2020/8/5
* 負責人/管理者角色
* 負責外部儲存備忘錄角色物件
*/class
caretaker
/** * 獲取備忘錄物件
*/public
memento
getmemento()
}
呼叫:
package
com.example.designpattern.memento
;/**
* @author administrator
* @date 2020/8/5
*/class
client
}
測試結果:
圖4 測試結果
行為型模式 備忘錄模式
備忘錄模式 在不破壞原封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣,以後就可以將該物件恢復到原先儲存的狀態。備忘錄模式角色 發起人 originator 角色 該角色記錄當前時刻的內部狀態,負責定義哪些屬於備份範圍的狀態,負責建立和恢復備忘錄資料 備忘錄 memento ...
行為型模式 備忘錄模式
核心 就是儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。結構1 源髮器類 originator。2 備忘錄類 memento。3 負責人類 care take。開發中常見的應用場景 1 棋類遊戲中的,悔棋。2 普通軟體中的,撤銷操作。3 資料庫軟體中的,事務管理中的,回滾操作。...
備忘錄模式 物件行為型模式
一 意圖 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。二 適用性 以下情況使用備忘錄模式 三 結構 四 public class callofduty public void quit public memento crea...