行为模式之备忘录模式
备忘录模式(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循环中,一是控制不了备忘录建立 的数据数量;二是大对象的建立是要消耗资源的,需要考虑系统的性能。因此,如果出现这样的代码,设计师就应该修改架构。
行为模式之备忘录模式相关推荐
- 设计模式之观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式
前言 这是设计模式的最后一章,包含了剩余的 行为型模式 中的 观察者模式.中介者模式.迭代器模式.访问者模式.备忘录模式.解释器模式 系列文章 第一章:7种设计原则之单一职责原则.接口隔离原则.依赖倒 ...
- 设计模式(模板模式,命令模式,备忘录模式)
目录 模板模式 什么是模板模式? 术语? 什么时候使用模板模式? 模板模式的优点? 模板模式的缺点? 角色? 钩子函数? 注意事项和细节? 什么场景使用模板模式? 案例: 命令模式 什么是命令模式? ...
- 设计模式自学笔记007_Real(命令模式、备忘录模式、桥接模式)
设计模式自学笔记007_Real(命令模式.备忘录模式.桥接模式) 一.命令模式 在软件设计的过程中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道请求的操作是哪个.我们只需要 ...
- 设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录
01:设计模式 行为型模式 – 备忘录模式(定义.结构.优缺点 适用场景分析) 02:设计模式 行为型模式 – 备忘录模式 具体实例:游戏挑战BOSS 03:设计模式 行为型模式 实例 – 备忘录模式 ...
- Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式
Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...
- 设计模式(行为型模式)——备忘录模式(Memento)
2019独角兽企业重金招聘Python工程师标准>>> 本章讲讲第三类和第四类. 备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫 ...
- 设计模式19——行为型模式之备忘录模式
定义:备忘录模式(MementoPattern),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 类型:对象行为型模式. 概述 ...
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- 三、行为型模式【访问者模式、备忘录模式、命令模式、解释器模式、中介模式】
访问者模式 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身,保持类职责单一.满足开闭原则以及应对代码的复杂性. 多态是一种动态绑定,可以在运行时获取对象的实际类型,来运行实际类型对应的方法. ...
最新文章
- css之line-height及图片文字垂直居中
- MFC中滚动条slider和编辑框edit的联动
- 类库,通用变量,is/as运算符,委托。
- PageHelper分页插件的原理是什么
- 期货与期权(part2)--远期合约
- 使用nagios监控io,内存
- 深度学习《GAN模型学习》
- Html 解决长串英文字母显示不能自动换行
- 使用 Layui 模板引擎在页面中插入 JS
- WSJ在隐私是否真的那么可怕
- matlab的dc程序,基于MATLAB的数字式DC/DC开关电源系统建模
- 关于ubuntu 下载后没有网的情况
- 对于短信验证码登录流程详细步骤
- 数独算法c语言,数独求解算法C.
- rayleigh波的频散曲线matlab,运用matlab画出瑞利波的频散曲线
- Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
- 会员制实现C2B定制有机农产品,被中粮我买投资的良食网这样卖有机生鲜
- uni-app监听窗口尺寸变化事件和隐藏键盘
- 有关projecteuler题库621题的lisp解答,萌新求围观。
- 机器学习(七)音频可视化第二篇
热门文章
- php 检测网址是否有效
- 使用Google Custom Search打造站内搜索
- 机器学习速成课程 | 练习 | Google Development——编程练习:逻辑回归
- 每日一题(C语言基础篇)1
- ubuntu 14.04 LTS(64bit) Anacoda2环境下安装gensim
- spring IOC容器 Bean 管理——基于注解方式
- 【AI视野·今日Sound 声学论文速览 第三期】Wed, 20 Apr 2022
- 【AI视野·今日CV 计算机视觉论文速览 第203期】Fri, 21 May 2021
- 【ICLR2019】Poster 论文汇总
- CSDN的一些年度大牛(2018)