一、备忘录(Memento)模式结构

备忘录对象是一个用来存储另外一个对象内部状态的快照(snapshot)的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来适合的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。

 备忘录模式的结构图如下所示

  aaarticlea/png;base64,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" alt="" />

备忘录模式涉及三个角色:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。

备忘录角色:

(1)       将发起人对象的内部状态存储起来,备忘录可以根据发起人对象的判断来决定存储多少发起人对象的内部状态。

(2)       备忘录可以保护其内容不被发起人对象之外的任何对象所读取。

备忘录有两个等效的接口:

窄接口:负责人(Caretaker)对象和其他除发起人对象之外的任何对象看到的是备忘录的窄接口(narrow interface),这个窄接口只允许它把备忘录对象传给其他对象。

宽接口:与负责人对象看到的窄接口相反的是,发起人对象可以看到一个宽接口(wide interface),这个宽接口允许它读取所有的数据,以便根据这些数据恢复这个发起人对象的内部状态。

发起人角色:

(1)       创建一个含有当前的内部状态的备忘录对象。(2)使用备忘录对象存储其内部状态。

负责人角色:

(1)       负责保存备忘录对象。(2)不检查备忘录对象的内容。


代码如下:

 public static void main(String[] args) {

         //发起者
Originator originator=new Originator();
Caretaker caretaker=new Caretaker();
originator.setState("a");
MementoIF mementoIF=originator.createMemento(); caretaker.saveMemento(mementoIF);
//改变状态
originator.setState("b");
System.out.println("当前state=="+originator.getState());
//恢复状态
mementoIF=caretaker.retrieveMemento();
originator.restoreMemento(mementoIF);
System.out.println("当前state=="+originator.getState());
} } interface MementoIF{}
//发起者
class Originator { private String state; public Originator(){} //创建一个备忘录
public MementoIF createMemento(){ return new Memento(this.state);
}
//将发起者恢复到备忘录对象记录的状态
public void restoreMemento(MementoIF mementoIF){ Memento memento=(Memento) mementoIF; this.state=memento.getState();
} public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
System.out.println("state="+state);
} //内部类 备忘录
class Memento implements MementoIF{
private String state;
public Memento(String state){
this.state=state; }
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
} }
}
//备忘录负责人
class Caretaker{ private MementoIF mementoIF; public MementoIF retrieveMemento(){ return this.mementoIF;
} public void saveMemento(MementoIF mementoIF){ this.mementoIF=mementoIF;
} }

执行结果:

state=a
state=b
当前state==b
当前state==a


二、多检查点备忘录

参考:http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html

三、备忘录模式在Java中的应用

J2EE框架中备忘录模式的应用

Java引擎提供Session对象,可以弥补HTTP协议的无状态缺点,存储用户的状态。当一个新的网络用户调用一张JSP网页或者Servlet时,Servlet引擎会创建一个对应于这个用户的Session对象,具体的技术细节可能是向客户端浏览器发送一个含有Session ID的Cookie,或者使用URL改写技术将Session ID 包括在URL中等。在一段有效时间里,同一个浏览器可以反复访问服务器,而Servlet引擎便可以使用这个Session ID来判断来访者应当与哪一个Session对象对应。Session和Cookie的使用都是备忘录模式,如下图所示:

四、备忘录模式的优缺点

优点:

1、  有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取。这时,使用备忘录可以把复杂的发起人内部信息对其他的对象屏弊起来,从而可以恰当地保持封装的边界。

2、  本模式简化了发起人类,发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理它们所需要的这些状态的版本。

3、  当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。

缺点:

1、  如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。

2、  当负责人角色将一个备忘录存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否会昂贵。

参考:

http://blog.csdn.net/fg2006/article/details/6575760

http://men4661273.iteye.com/blog/1633484

《JAVA与模式》之备忘录模式的更多相关文章

  1. 重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 实现不了是研发的借口? 实现不了,有时候是功能复杂度较高难以实 ...

  2. java设计模式-----21、备忘录模式

    概念: Memento模式也叫备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式,它的作用是保存对象的内部状态,并在需要的时候(u ...

  3. Java设计模式学习记录-备忘录模式

    前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...

  4. Java设计模式(21)——行为模式之备忘录模式(Memento)

    一.概述 概念 UML简图 角色 根据下图得到角色 备忘录角色(Memento).发起人角色(Originator).负责人角色(Caretaker) 二.实践 使用白箱实现,给出角色的代码: 发起人 ...

  5. 《JAVA设计模式》之备忘录模式(Memento)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述备忘录(Memento)模式的: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. 备忘录 ...

  6. 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式

    [状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...

  7. 设计模式20---设计模式之备忘录模式(Memento)(行为型)

    1.讲解备忘录模式 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 1.1定义 在不破坏封 ...

  8. 行为型模式(十) 备忘录模式(Memento)

    一.动机(Motivate) 我们看上图,一个对象肯定会有很多状态,这些状态肯定会相互转变而促进对象的发展,如果要想在某一时刻把当前对象回复到以前某一时刻的状态,这个情况用"备忘录模式&qu ...

  9. Head First设计模式——中介者模式和备忘录模式

    中介者 中介者模式:使用中介者来集中相关对象之间复杂的沟通方式和控制方式. Bob有一个自动屋,当他的闹钟响了只有,闹钟会告诉咖啡壶开始煮咖啡.后来客户不断的提出许多新需求:周末不要提供咖啡.下班后需 ...

  10. 设计模式---状态变化模式之备忘录模式(Memento)

    一:概念 用于保存对象的内部状态,并在需要的时候(undo/rollback)回复对象以前的状态 二:应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以 ...

随机推荐

  1. javax.validation.UnexpectedTypeException: No validator could be found for constraint 'org.hibernate.validator.constraints.Length' validating type

    使用hibernate validator出现上面的错误, 需要注意: @NotNull 和 @NotEmpty  和@NotBlank 区别 @NotEmpty 用在集合类上面@NotBlank 用 ...

  2. redis 中 set 和 hset 有什么不同,什么时候使用 hset 什么时候使用set?

    转载:https://blog.csdn.net/wab719591157/article/details/73379844 redis 中存数据时,到底什么时候用  hset 相比于 set 存数据 ...

  3. LintCode: Binary Tree Postorder Traversal

    C++,递归 /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *righ ...

  4. vsphere性能

    vNUMA介绍 http://virtualbarker.com/ vSphere VMware Performance With every release of vSphere the overh ...

  5. DbScopeFactory

    using (var db = DbScopeFactory.Create()) { //这里修改数据 db.SaveChanges(); }

  6. Hello World程序演示Qt项目的建立、编译、运行和发布

    一.Qt项目的建立 1.选择项目模板. 选择"文件-->新建文件或工程",在选择模板页面选择Qt C++项目中的"Qt Gui应用"一项,然后单击&quo ...

  7. 用Gearman分发PHP应用程序的工作负载

    文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/518 虽然一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体如今 ...

  8. 每天五个java相关面试题(7)--线程篇

    首先关于线程能够先看我之前这篇博文熟悉一下线程生命周期的图示以及文字说明 好開始了: 1.java 中有几种方法能够实现一个线程? 答:有两种实现方法.各自是继承 Thread类与实现Runnable ...

  9. 〖Linux〗使用sed命令修改小端(little endian)存储的数据

    #!/bin/bash - #=============================================================================== # # F ...

  10. 【Linux】命令写在文件中并调用awk -f

    我们在使用awk命令的时候,有时候命令特别长,在终端写出来格式太乱,难以阅读,以下是一个将命令写在文件中,并使用awk调用的具体案例 1.现在有文件file3.txt,内容如下: 2.ak2.awk脚 ...