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 的英文原文
作者不详 |