点击这里给我发消息 点击这里给我发消息

java设计模式之Memento(恢复对象原状态)

添加时间:2013-12-7
    相关阅读: 设计 技术 程序 项目

  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模式.
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册