免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2554 | 回复: 0
打印 上一主题 下一主题

Memento模式(转载) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-09 05:49 |只看该作者 |倒序浏览
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 的英文原文


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/67175/showart_2144214.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP