设计模式之 Memento 备忘机制
优质
小牛编辑
129浏览
2023-12-01
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 程序检查,发现确实有未填写项目,则在该项目下红字显示警告或错误,同时还要显示用户刚才已经输入的表项。
这种技术的实现,就是利用了 Javabean 的 scope="request" 或 scope="session" 特性,也就是 Memento 模式。
具体示例和代码见 JavaWorld 的英文原文 , Javabean 表单输入特性参见我的另外一篇文章。