1、意图

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

2、适用性

(1)必须保存一个对象在某一个时刻的状态,这样以后需要时它才能恢复到先前的状态。

(2)如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

3、参与者

(1)Memento:备忘录存储原发器对象的内部状态。原发器根据需要决定备忘录存储原发器的哪些内部状态;防止原发器以外的其他对象访问备忘录。备忘录实际上有两个接口,管理者只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。相反,原发器能够看到一个宽接口,允许它访问返回到先前状态所需的所有数据。理想的情况是只允许生成本备忘录的那个原发器访问本备忘录的内部状态

(2)Originator:原发器创建一个备忘录,用以记录当前时刻它的内部状态;使用备忘录恢复内部状态

(3)Caretaker:负责保存好备忘录中;不能对备忘录的内容进行操作或检查

4、协作 

(1)管理器向原发器请求一个备忘录,保留一段时间后,将其送回原发器。

(2)备忘录是被动的,只有创建备忘录的原发器会对它的状态进行赋值和检索

5、效果

(1)保持封装边界

(2)简化了原发器
(3)使用备忘录可能代价很高

(4)定义窄接口和宽接口

(5)维护备忘录的潜在代价

行为模式之Memento模式相关推荐

  1. 设计模式【17】——备忘录模式(Memento 模式)

    文章目录 前言 一.备忘录模式(Memento 模式) 二.具体源码 1.Memento.h 2.Subject.cpp 3.main.cpp 三.运行结果 总结 前言 备忘录模式用于保存和恢复对象的 ...

  2. Behavioral模式之Memento模式

    1.意图 在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. 2.别名 Token 3.动机 有时候有必要记录一个对象的内部状态.为 ...

  3. Memento 模式

    Memento 模式 使用Memento模式可以实现应用程序的以下功能. Undo(撤销) Redo(重做) History(历史记录) Snapshot(快照) Memento模式事先将某个时间点的 ...

  4. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  5. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  6. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...

  7. Java设计模式(10)代理模式(Proxy模式)

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

  8. 设计模式(行为型模式)——备忘录模式(Memento)

    2019独角兽企业重金招聘Python工程师标准>>> 本章讲讲第三类和第四类. 备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫 ...

  9. 备忘录模式(Memento)的原版与简化版实现

    备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 适用场景: 1.保存一个对象在某一个时刻的(部分) ...

最新文章

  1. Pacbio 数据相关的几个重要概念
  2. Java中使用Jedis连接池连接Redis数据库流程
  3. 《Hadoop权威指南》第二章 关于MapReduce
  4. 谷歌浏览器linux太耗电,Chrome浏览器太耗电?微软出招
  5. 诗与远方:无题(十二)
  6. Spring的junit4测试集成
  7. 拓端tecdat|基于matlab的Lorenz系统仿真可视化
  8. Ribbon风格下,依然叫菜单或者菜单卡、菜单页
  9. C#汉诺塔递归算法实现
  10. 几种前端h264播放器记录
  11. 【课程作业】学术英语写作:文献阅读报告1
  12. 警惕食源性疾病——食源性病原菌介绍
  13. 面向自动驾驶车辆验证的抽象仿真场景生成
  14. 惯性导航的定位原理是什么?
  15. 怎么将heic转为jpg格式,哪个图片转换器好用
  16. 【历史上的今天】1 月 20 日:Scala 问世;苹果低谷期的开始;专家系统之父诞生
  17. hdu 4043 FXTZ II [ 概率 + Java大数]
  18. 中学计算机课外小组活动计划,课外活动计划实施方案
  19. 如何用html5制作3d旋转照片集
  20. 王川: 深度学习有多深, 学了究竟有几分?

热门文章

  1. 转HTML中的table转为excel
  2. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  3. POJ 3620-Avoid The Lakes
  4. 让我们来开发一种更类似人脑的神经网络吧(三)
  5. python入门教程书籍-初学者最好的Python书籍
  6. 零基础可以学python吗-对于几乎是零基础的人,直接学 Python 编程合适吗?
  7. python urllib.request 爬虫 数据处理-Python爬虫学习之(二)| urllib进阶篇
  8. 自学python转行-转行Python,应该如何短期自学,达到就业水平
  9. python需要学多久才能找到工作-为什么Python适合初学者,一般要学习多久
  10. python基础语法总结-Python基础语法总结之逻辑运算