设计模式袖珍版 连续转载之 - Memento

原创 2005年06月01日 00:56:00
原作:fanix

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

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

  1. public class Originator { 
  2.    private int number; 
  3.   private File file = null;
  4.   public Originator(){}
  5.   // 创建一个Memento
  6.   public Memento getMemento(){
  7.     return new Memento(this);
  8.   }
  9.   // 恢复到原始值
  10.   public void setMemento(Memento m){
  11.      number = m.number;
  12.      file = m.file;
  13.   }
  14. }


 
 

我们再看看Memento类:
程序代码:

  1. private class Memento implements java.io.Serializable{
  2.   private int number;
  3.   private File file = null;
  4.   public Memento( Originator o){
  5.     number = o.number;
  6.     file = o.file;
  7.   }
  8. }

 

可见 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模式.

设计模式学习笔记——备忘录(Memento)模式

设计模式学习笔记——备忘录(Memento)模式@(设计模式)[设计模式, 备忘录模式, memento]设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memento...
  • q547550831
  • q547550831
  • 2017年04月13日 10:44
  • 605

浅谈JAVA设计模式之——备忘录模式(Memento)

一、概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 二、适用性 1.必须保存一个对象在某一个时刻的(部分)状态,这样以后需...
  • l1028386804
  • l1028386804
  • 2015年05月09日 13:02
  • 1360

设计模式袖珍版 连续转载之 - Factory

原作:fanix定义:提供创建对象的接口.为何使用?工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为...
  • dazern
  • dazern
  • 2005年06月01日 00:46
  • 1029

设计模式袖珍版 连续转载之 - Proxy(代理)

原作:fanix理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣.Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系...
  • dazern
  • dazern
  • 2005年06月01日 00:50
  • 837

设计模式袖珍版 连续转载之 - Builder

原作:fanixBuilder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型...
  • dazern
  • dazern
  • 2005年06月01日 00:48
  • 843

设计模式袖珍版 连续转载之 - State

             State的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 何时使用? State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If els...
  • dazern
  • dazern
  • 2005年06月01日 01:08
  • 1568

设计模式袖珍版 连续转载之 - Bridge

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • dazern
  • dazern
  • 2005年06月01日 00:54
  • 886

设计模式袖珍版 连续转载之 - Prototype(原型)

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • dazern
  • dazern
  • 2005年06月01日 00:47
  • 1153

设计模式袖珍版 连续转载之 - Adapter(适配器)

showbanner(6,6,1);google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =2...
  • dazern
  • dazern
  • 2005年06月01日 00:51
  • 924

设计模式袖珍版 连续转载之 - Strategy(策略)

Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线...
  • dazern
  • dazern
  • 2005年06月01日 01:09
  • 1078
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式袖珍版 连续转载之 - Memento
举报原因:
原因补充:

(最多只允许输入30个字)