定義:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣就可以將該物件恢復到原先儲存的狀
態。備忘錄模式引入乙個儲存狀態的備忘錄物件,為了讓外部無法訪問這個物件的值,一般把這個物件實現成需要儲存資料的物件的內部類,通常還是私有的,保證封裝性不被破壞。但是這個備忘錄物件需要儲存在外部,所以要讓備忘錄物件實現乙個窄介面,這個介面是空的,只是乙個標識介面,什麼方法都沒有,從而保證了備忘錄內的資料不會被外部獲取或操作。
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
}
結合原型模式:如果原發器物件中全部或大部分的狀態都需要儲存,乙個簡潔的辦法就是直接轉殖乙個原發器物件。也就是說這時備忘錄物件中存放的是乙個原發器物件的例項。publicclass
flowamockimplementscloneable
/*** 執行流程的第一階段(前半部分)
*/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可根據需要...