设计模式袖珍版 连续转载之 - Memento

原创 2005年06月01日 00:56:00
原作:fanix

Memento定义:
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.

Memento模式相对也比较好理解,我们看下列代码:
程序代码:

  1. public class Originator { 
  2.    private int number; 
  3.   private File file = null;
  4.   public Originator(){}
  5.   // 创建一个Memento
  6.   public Memento getMemento(){
  7.     return new Memento(this);
  8.   }
  9.   // 恢复到原始值
  10.   public void setMemento(Memento m){
  11.      number = m.number;
  12.      file = m.file;
  13.   }
  14. }


 
 

我们再看看Memento类:
程序代码:

  1. private class Memento implements java.io.Serializable{
  2.   private int number;
  3.   private File file = null;
  4.   public Memento( Originator o){
  5.     number = o.number;
  6.     file = o.file;
  7.   }
  8. }

 

可见 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模式.

相关文章推荐

设计模式学习笔记---备忘录模式memento pattern(Java版)

一、场景 录入大批人员资料,当正在录入当前人资料时,发现上一个人录错了 此时需要恢复上一个人的资料,再进行修改。 Word文档编辑时,忽然电脑死机或断电,再打开时可以看到word 提示你恢复到...

设计模式C++实现(18)——备忘录 Memento

设计模式C++实现(18)——备忘录 Memento

UCDOS98特别袖珍版

  • 2012年02月05日 15:21
  • 745KB
  • 下载

《GOF设计模式》—备忘录(MEMENTO)—Delphi源码示例:备忘录接口

示例:备忘录接口 说明: (1)、定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 ...

加密之星(袖珍版)源代码

  • 2006年01月17日 10:19
  • 139KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式袖珍版 连续转载之 - Memento
举报原因:
原因补充:

(最多只允许输入30个字)