当前位置: 首页 > 文档资料 > Java 设计模式 >

设计模式之 Memento 备忘机制

优质
小牛编辑
127浏览
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 表单输入特性参见我的另外一篇文章。