行為模式之Memento(備忘機制)

來源:互聯網
上載者:User

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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.