java備忘錄模式例項

2021-06-21 10:23:37 字數 3868 閱讀 7779

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

態。備忘錄模式引入乙個儲存狀態的備忘錄物件,為了讓外部無法訪問這個物件的值,一般把這個物件實現成需要儲存資料的物件的內部類,通常還是私有的,保證封裝性不被破壞。但是這個備忘錄物件需要儲存在外部,所以要讓備忘錄物件實現乙個窄介面,這個介面是空的,只是乙個標識介面,什麼方法都沒有,從而保證了備忘錄內的資料不會被外部獲取或操作。

memento:備忘錄。主要用來儲存原發器物件的內部狀態。

originator:原發器。需要備忘錄物件儲存其內部狀態的物件。

caretaker:備忘錄管理者。主要是儲存備忘錄物件。

/*** 備忘錄的窄介面**/

public inte***cememento  

/*** 原發器物件**/

public classoriginator

/*** 重新設定備忘錄的物件,讓他回到備忘錄記錄的狀態

* @parammemento

*/public voidsetmemento(memento memento)

/*** 真正的備忘錄物件,實現備忘錄窄介面

* 實現成私有的,不讓外部訪問**/

private static

class mementoimplimplementsmemento

publicstring getstate()}}

/*** 負責儲存備忘錄的物件**/

public classcaretaker

/*** 獲取被儲存的備忘錄物件

* @return被儲存的備忘錄物件

*/publicmemento retrievememento()

}樣例

/**

* 備忘錄窄介面**/

public

inte***ce

flowamockmemento

/*** 原發器,模擬執行流程a

* @author joe

**/public

class

flowamock

/*** 執行流程的第一階段(前半部分)

*/public

void

runphaseone

()/**

* 按照方案一來執行流程的後半部分

*/public

void

schema1

()/**

* 按照方案二來執行流程的後半部分

*/public

void

schema2

()/**

* 建立原發器的備忘錄物件

* @return

*/public

flowamockmemento

creatememento

()/**

* 重新設定原發器物件狀態,讓其回到備忘錄物件記錄的狀態

* @param memento

*/public

void

setmemento

(flowamockmemento

memento

)/**

* 真正的備忘錄物件,實現備忘錄的窄介面

* 實現成私有的內部類,不讓外部訪問**/

private

static

class

mementoimpl

implements

flowamockmemento

public

intgettempresult

()public

string

gettempstate()}

}/**

* 儲存模擬流程a物件的備忘錄物件

**/public

class

flowamementocaretaker

/*** 獲取被儲存的備忘錄物件

* @return

*/public

flowamockmemento

retrievememento()}

public

class

client

}

結合原型模式:如果原發器物件中全部或大部分的狀態都需要儲存,乙個簡潔的辦法就是直接轉殖乙個原發器物件。也就是說這時備忘錄物件中存放的是乙個原發器物件的例項。public

class

flowamock

implementscloneable

/*** 執行流程的第一階段(前半部分)

*/public

void

runphaseone

()/**

* 按照方案一來執行流程的後半部分

*/public

void

schema1

()/**

* 按照方案二來執行流程的後半部分

*/

public

void

schema2

()public

flowamockmemento

creatememento

()catch

(clonenotsupportedexceptione)

return

null;

}/**

* 設定原發器物件的狀態,讓其回到備忘錄物件記錄的狀態

* @param memento

*/public

void

setmemento

(flowamockmemento

memento

)private

static

class

mementoimpl

implements

flowamockmemento

public

flowamock

getflowamock()}

}

使用備忘錄的潛在代價
標準的備忘錄模式的實現機制是依靠快取來實現的,因此,當需要備忘錄的資料較大時,或者數量很多時,或者使用者頻繁第建立備忘錄物件時,都會導致很大的開銷。

java 備忘錄模式

package memento 備忘錄 用於存放狀態的類 author administrator public class memento public string getstate public void setstate string state package memento 儲存和讀取備...

java設計模式 備忘錄模式

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

備忘錄模式

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