memento是乙個儲存另外乙個物件內部狀態拷貝的物件.這樣以後就可以將該物件恢復到原先儲存的狀態.
第一種就是採用兩個不同的介面類來限制訪問許可權。這兩個介面類中,乙個提供比較完
備的操作狀態的方法,我們稱它為寬介面;而另乙個則可以只是乙個標示,我們稱它為窄接
口。備忘錄角色要實現這兩個介面類。這樣對於「備忘發起角色」採用寬介面進行訪問,而
對於其他的角色或者物件則採用窄介面進行訪問。
這種實現比較簡單,但是需要人為的進行規範約束——而這往往是沒有力度的。
第二種方法便很好的解決了第一種的缺陷:採用內部類來控制訪問許可權。將備忘錄角色
作為「備忘發起角色」的乙個私有內部類。好處我不詳細解釋了,看看**吧就明白了。下
面的**是乙個完整的備忘錄模式的教學程式。它便採用了第二種方法來實現備忘錄模式。
還有一點值得指出的是,在下面的**中,對於客戶程式來說「備忘錄管理者角色」是
不可見的,這樣簡化了客戶程式使用備忘錄模式的難度。下面採用「備忘發起角色」來呼叫
訪問「備忘錄管理者角色」,也可以參考門面模式在客戶程式與備忘錄角色之間新增乙個門面角色。
class originator
//建立乙個備忘錄角色,並將當前狀態屬性存入,託給「備忘錄管理者角色」存放。
public void creatememento()
//this is other business methods...
//they maybe modify the attribute state
public void modifystate4test(int m)
//作為私有內部類的備忘錄角色,它實現了窄介面,可以看到在第二種方法中寬接
口已經不再需要
//注意:裡面的屬性和方法都是私有的
private class memento implements mementoif
private int getstate()}}
//測試**——客戶程式
public class testinnerclass
}//窄介面
inte***ce mementoif{}
//「備忘錄管理者角色」
class caretaker
public mementoif getmemento()
}
clone 機制,這使得複製乙個物件變得輕鬆起來。使用了clone 機制的備忘錄模式,備忘錄
角色基本可以省略了,而且可以很好的保持物件的封裝。但是在為你的類實現clone 方法時
一定要慎重。
在jsp應用中,我們通常有很多表單要求使用者輸入,比如使用者註冊,需要輸入姓名和email等, 如果一些表項使用者沒有填寫或者填寫錯誤,我們希望在使用者按"提交submit"後,通過jsp程式檢查,發現確實有未填寫專案,則在該專案下紅字顯示警告或錯誤,同時,還要顯示使用者剛才已經輸入的表項.
備忘錄模式
備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...
備忘錄模式
先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...
備忘錄模式
面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...