行為型模式(六) 備忘錄模式

2021-10-08 21:38:34 字數 2747 閱讀 7501

備忘錄(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...