设计模式之(十三)备忘机制Memento

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

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

public class Originator { 

  public int number;

  public 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{

  public int number;

  public 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模式.

转自http://www.jdon.com/designpatterns/memento.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值