Memento定義:
memento是一個保
存另外一個對象內部狀態拷貝的對象.這樣以後就可以將該對象恢複到原先儲存的狀態.
Memento模式相對也比較好理解,我們看下列代
碼:
public class Originator {
private int number;
private File file = null;
public Originator(){}
// 建立一個Memento public Memento getMemento(){ return new Memento(this); }
// 恢複到原始值 public void setMemento(Memento m){ number = m.number; file = m.file; }
}
|
我們再看看Memento類:
private class Memento implements java.io.Serializable{
private int number;
private File file = null;
public Memento( Originator o){
number = o.number; file = o.file;
}
}
|
可見
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表單輸入特性參見我的另外一篇文章.