Memento 定義 :
memento 是一個保存另外一個物件內部狀態拷貝的物件。這樣以後就可以將該物件恢復到原先保存的狀態。
Memento 模式相對也比較好理解 , 我們看下列代碼 :
public class Originator { private File file = null; public Originator(){} // 創建一個 Memento // 恢復到原始值 }
|
我們再看看 Memento 類別 :
private class Memento implements java.io.Serializable{ private int number; private File file = null; public Memento( Originator o){ number = o.number; } }
|
可見 Memento 中保存了 Originator 中的 number 和 file 的值。 通過呼叫 Originator 中 number 和 file 值改變的話 , 通過呼叫 setMemento() 方法可以恢復。
Memento 模式的缺點是耗費大 , 如果內部狀態很多 , 再保存一份 , 無意要浪費大量記憶體。
Memento 模式在 Jsp+Javabean 中的應用
在 Jsp 應用中 , 我們通常有很多表單要求用戶輸入 , 比如用戶註冊 , 需要輸入姓名和 Email 等 , 如果一些表項用戶沒有填寫或者填寫錯誤 , 我們希望在用戶按 " 提交 Submit" 後 , 通過 Jsp 程式檢查 , 發現確實有未填寫專案 , 則在該專案下紅字顯示警告或錯誤 , 同時 , 還要顯示用戶剛才已經輸入的表項。
如下圖中 First Name 是用戶已經輸入 ,Last Name 沒有輸入 , 我們則提示紅字警告 .:
這種技術的實現 , 就是利用了 Javabean 的 scope="request" 或 scope="session" 特性 , 也就是 Memento 模式。
具體示例和代碼見 JavaWorld的英文原文 , Javabean 表單輸入特性參見我的另外 一篇文章。