`

設計模式之Memento(備忘機制)

JSP 
阅读更多

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 表單輸入特性參見我的另外 一篇文章。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics