文档章节

小菜学设计模式——备忘录模式

learn_more
 learn_more
发布于 2015/06/16 09:43
字数 898
阅读 130
收藏 7

精选30+云产品,助力企业轻松上云!>>>


背景

    又是一次失败的相亲,本来上次见面留下很好的印象的,还约好的一起去看《我的个神》,可是看电影那天,公司项目太急了,刚好又一个哥们离职走了,项目大梁直接压在我身上,没办法咯,加班....最后连看电影的时间都忘记了,然后就没有然后了,如果可以重来的话,我希望,回到重前,让我拉着你的小手去看《我的个神》.


1、使用意图

    记住某时刻的状态,等到需要时,回到那一刻


2、生活实例

    假如爱可以重来,我会回到过去,对你说三个字。


3、Java 例子(框架、JDK 、JEE)

    OSCache缓存架构,可以缓存JSP,缓存变量等,可以缓存在内存,亦可以缓存在磁盘,他就是备忘录模式的体现,其实很多地方都可以体现,比如Java 序列化的目的之一就是保存一个对象的当前状态。


4、模式类图

1.Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。

2.Memento(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可看到备忘录的宽接口,允许它访问返回到先前状态所需要的所有数据。

3.Caretaker(管理者):负责备忘录Memento,不能对Memento的内容进行访问或者操作。


5、模式优点

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

    要保存的细节非封装在了Memento中了,哪一天要更改保存的细节也不用影响客户端,因为可以直接从CareTaker那里拿取之前存放在里面的Memento,然后把他给Originator,继续生成一个和以前一样的Memento就行了。

    Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分,Originator   可以根据保存的Memento信息还原到前一个状态。


6、与类似模式比较

    使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。

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

    不过备忘录模式有个很大的缺点就是数据保存在内存中,太好内存,有时候可以保存在磁盘中,但是相对速度又会慢点,现在很多架构都会支持内存缓存和磁盘缓存,比如OSCache缓存架构,或者Lucene全文索引等。


learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中
请先登录后再评论。
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
371
0
史上最全设计模式导学目录(完整版)

圣诞献礼! 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家...

LoveLion
03/31
0
0
设计模式学习目录,仿佛看见了一道光给作者点赞666

史上最全设计模式导学目录(完整版) 原创 2013年12月24日 23:15:16 标签: 软件工程 / 设计模式 / 博客 / 软件开发 190146 圣诞献礼! 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100...

osc_iiheq33y
2018/01/16
25
0
设计模式--刘伟(转)

原文:https://blog.csdn.net/lovelion/article/details/17517213 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计...

osc_k5ta3dng
2018/05/16
5
0
23种常用设计模式

基础知识 设计模式概述 从招式与内功谈起——设计模式概述(一):设计模式从何而来? 从招式与内功谈起——设计模式概述(二):设计模式是什么? 从招式与内功谈起——设计模式概述(三):...

欧阳海阳
2018/08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS二分查找

二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤: (1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素...

osc_ftbxuxl1
20分钟前
9
0
王爽汇编语言(第三版)环境搭建(附PDF及工具下载)

一、前言 最近在学习汇编语言,使用的是读者评价非常高的王爽老师写的《汇编语言》(第三版),为了适应现在各个版本的windows操作系统,所以采用VMWare虚拟机来搭建纯DOS环境。 二、需要的工...

osc_xsd7kks3
22分钟前
4
0
关于面向对象和面向过程本质的区别(个人感悟)

前言:   接触面向对象的概念也差不多两年了,对于面向对象也有着自己的一些感悟,期间也看到过面向过程的一些文章,但总是对于两种思想没有明确的区别概念,刚好今天在某篇博客上看到对于...

osc_zf8orajc
23分钟前
7
0
6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

每周趣图 产品经理设计体验/用户实际体验 本周就不写技术分析文章了,分享几个珍藏已久的 IDEA 的「骚技巧」,助你快速完成代码。 还等什么?赶紧上车吧...... 先赞后看,养成习惯。微信搜索...

楼下小黑哥
25分钟前
3
0
关于面向对象和面向过程本质的区别(个人感悟)

前言:   接触面向对象的概念也差不多两年了,对于面向对象也有着自己的一些感悟,期间也看到过面向过程的一些文章,但总是对于两种思想没有明确的区别概念,刚好今天在某篇博客上看到对于...

osc_tjnx25e9
25分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部