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

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 中的 numberfile 的值。 通過呼叫 Originatornumberfile 值改變的話 , 通過呼叫 setMemento() 方法可以恢復。

Memento 模式的缺點是耗費大 , 如果內部狀態很多 , 再保存一份 , 無意要浪費大量記憶體。

Memento 模式在 Jsp+Javabean 中的應用
Jsp 應用中 , 我們通常有很多表單要求用戶輸入 , 比如用戶註冊 , 需要輸入姓名和 Email, 如果一些表項用戶沒有填寫或者填寫錯誤 , 我們希望在用戶按 " 提交 Submit", 通過 Jsp 程式檢查 , 發現確實有未填寫專案 , 則在該專案下紅字顯示警告或錯誤 , 同時 , 還要顯示用戶剛才已經輸入的表項。

如下圖中 First Name 是用戶已經輸入 ,Last Name 沒有輸入 , 我們則提示紅字警告 .:

這種技術的實現 , 就是利用了 Javabeanscope="request"scope="session" 特性 , 也就是 Memento 模式。

具體示例和代碼見 JavaWorld的英文原文 , Javabean 表單輸入特性參見我的另外 一篇文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值