备忘录模式(Memento Pattern)又称为快照(Snapshot)模式或Token模式。

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

通俗地说,备忘录模式就是将一个对象进行备份,提供一种程序数据的备份方法,其类图如下。

备忘录模式中有如下3个角色:

  • 发起人(Originator)角色:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘数据。
  • 备忘录(Memento)角色:负责存储发起人的内部状态,在需要时提供发起人需要的内部状态数据。
  • 负责人(Caretaker)角色:对备忘录角色进行管理、保存和提供备忘录。

Originator.java

// 发起人角色
public class Originator {// 内部状态private String state = "";public String getState() {return state;}public void setState(String state) {this.state = state;}// 创建备忘录public Memento createMemento() {return new Memento(this.state);}// 恢复一个备忘录public void restorMemento(Memento memento) {this.setState(memento.getState());}
}

Memento.java

// 备忘录角色
public class Memento {// 发起人的内部状态private String state;// 构造函数传递参数public Memento(String state) {this.state = state;}public String getState() {return state;}public void setState(String state) {this.state = state;}
}

Caretaker.java

// 负责人角色
public class Caretaker {// 备忘录对象private Memento memento;public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento = memento;}
}

Client.java

// 负责人角色
public class Caretaker {// 备忘录对象private Memento memento;public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento = memento;}
}

应用场景:

  • 需要保存和恢复数据的相关状态场景。
  • 提供一个可回滚的操作。
  • 需要监控副本的场景,例如,监控一个对象的属性,但是监控又不应该作为系统的主业务来调用,它只是边缘作用,即使出现监控不准、错误报警也影响不大,因此一般做法是备份一个主线程中的对象,然后由分析程序来分析。
  • 数据库连接的事务管理使用的就是备忘录模式。

注意事项:

  • 备忘录的生命周期,备忘录创建出来就要在最近的代码中使用,要主动管理它的生命周期,建立就要使用,不使用就要立刻删除其引用,等待垃圾回收器对它的回收处理。
  • 备忘录的性能。不要丰频繁建立备份的场景中使用备忘录模式,例如,for循环中,一是控制不了备忘录建立 的数据数量;二是大对象的建立是要消耗资源的,需要考虑系统的性能。因此,如果出现这样的代码,设计师就应该修改架构。

行为模式之备忘录模式相关推荐

  1. 设计模式之观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式

    前言 这是设计模式的最后一章,包含了剩余的 行为型模式 中的 观察者模式.中介者模式.迭代器模式.访问者模式.备忘录模式.解释器模式 系列文章 第一章:7种设计原则之单一职责原则.接口隔离原则.依赖倒 ...

  2. 设计模式(模板模式,命令模式,备忘录模式)

    目录 模板模式 什么是模板模式? 术语? 什么时候使用模板模式? 模板模式的优点? 模板模式的缺点? 角色? 钩子函数? 注意事项和细节? 什么场景使用模板模式? 案例: 命令模式 什么是命令模式? ...

  3. 设计模式自学笔记007_Real(命令模式、备忘录模式、桥接模式)

    设计模式自学笔记007_Real(命令模式.备忘录模式.桥接模式) 一.命令模式 在软件设计的过程中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道请求的操作是哪个.我们只需要 ...

  4. 设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录

    01:设计模式 行为型模式 – 备忘录模式(定义.结构.优缺点 适用场景分析) 02:设计模式 行为型模式 – 备忘录模式 具体实例:游戏挑战BOSS 03:设计模式 行为型模式 实例 – 备忘录模式 ...

  5. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

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

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

  7. 设计模式19——行为型模式之备忘录模式

     定义:备忘录模式(MementoPattern),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 类型:对象行为型模式. 概述 ...

  8. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  9. 三、行为型模式【访问者模式、备忘录模式、命令模式、解释器模式、中介模式】

    访问者模式 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身,保持类职责单一.满足开闭原则以及应对代码的复杂性. 多态是一种动态绑定,可以在运行时获取对象的实际类型,来运行实际类型对应的方法. ...

最新文章

  1. css之line-height及图片文字垂直居中
  2. MFC中滚动条slider和编辑框edit的联动
  3. 类库,通用变量,is/as运算符,委托。
  4. PageHelper分页插件的原理是什么
  5. 期货与期权(part2)--远期合约
  6. 使用nagios监控io,内存
  7. 深度学习《GAN模型学习》
  8. Html 解决长串英文字母显示不能自动换行
  9. 使用 Layui 模板引擎在页面中插入 JS
  10. WSJ在隐私是否真的那么可怕
  11. matlab的dc程序,基于MATLAB的数字式DC/DC开关电源系统建模
  12. 关于ubuntu 下载后没有网的情况
  13. 对于短信验证码登录流程详细步骤
  14. 数独算法c语言,数独求解算法C.
  15. rayleigh波的频散曲线matlab,运用matlab画出瑞利波的频散曲线
  16. Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
  17. 会员制实现C2B定制有机农产品,被中粮我买投资的良食网这样卖有机生鲜
  18. uni-app监听窗口尺寸变化事件和隐藏键盘
  19. 有关projecteuler题库621题的lisp解答,萌新求围观。
  20. 机器学习(七)音频可视化第二篇

热门文章

  1. php 检测网址是否有效
  2. 使用Google Custom Search打造站内搜索
  3. 机器学习速成课程 | 练习 | Google Development——编程练习:逻辑回归
  4. 每日一题(C语言基础篇)1
  5. ubuntu 14.04 LTS(64bit) Anacoda2环境下安装gensim
  6. spring IOC容器 Bean 管理——基于注解方式
  7. 【AI视野·今日Sound 声学论文速览 第三期】Wed, 20 Apr 2022
  8. 【AI视野·今日CV 计算机视觉论文速览 第203期】Fri, 21 May 2021
  9. 【ICLR2019】Poster 论文汇总
  10. CSDN的一些年度大牛(2018)