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

原创 2004年12月30日 09:11:00

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没有输入,我们则提示红字警告.:

memento.gif

这种技术的实现,就是利用了Javabean的scope="request"或scope="session"特性,也就是Memento模式

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

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

深入浅出设计模式(十三):21.观察者模式(Observer)22.命令模式(Command)23.备忘录模式(Memento)

21.观察者模式(Observer)每个月当银行发放工资时,都会有短信自动通知员工,员工就相当于观察者,账户就是被观察者,当账户余额有变动时,会自动通知观察者,这就是观察者模式的实际应用。哪里会使用到...
  • liuquan0071
  • liuquan0071
  • 2016年02月24日 15:01
  • 771

JS学习十五天----设计模式开篇

JS设计模式开篇 前言 作为小小程序员一枚,除了敲个hello,world以后啥都不会了,最近发现设计模式这个东西挺好,想搞一下,声明,本屌不是一个看见什么好,什么新潮就追什么的人,本屌还是一个比...
  • shanyongxu
  • shanyongxu
  • 2015年08月15日 19:28
  • 1024

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

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

浅谈Java设计模式(十九)备忘录模式(Memento)

前言: 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部...
  • caihongdao123
  • caihongdao123
  • 2016年07月11日 10:58
  • 6722

设计模式--Memento 模式

常用设计模式之备忘录模式。
  • bible_reader
  • bible_reader
  • 2016年09月19日 11:12
  • 536

设计模式之MemenTo模式

Memento.h #ifndef __MEMENTO_H_ #define __MEMENTO_H_ #include using namespace std; typedef stri...
  • ganpengjin1
  • ganpengjin1
  • 2013年07月03日 14:23
  • 784

设计模式—Java反射机制

1.Java反射机制是什么?        反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用...
  • ZackChu
  • ZackChu
  • 2017年02月08日 10:47
  • 222

设计模式之Memento模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 适用场合:比较适合用于功能比较复杂,但需要维护或记录属性历史的类...
  • qq_16687803
  • qq_16687803
  • 2015年06月27日 15:41
  • 498

iOS设计模式之四:备忘录模式和命令模式

原文出处: raywenderlich   译文出处: xmuzyq(@Krq_Tiger)。欢迎加入技术翻译小组。 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保...
  • xdrt81y
  • xdrt81y
  • 2014年04月18日 17:25
  • 1681
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之Memento(备忘机制)
举报原因:
原因补充:

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