小菜学设计模式——备忘录模式
小菜学设计模式——备忘录模式
learn_more 发表于2年前
小菜学设计模式——备忘录模式
  • 发表于 2年前
  • 阅读 104
  • 收藏 7
  • 点赞 1
  • 评论 0

华为云·免费上云实践>>>   

摘要: 本文是在学习《大话设计模式》所做的笔记,主要是个人理解面向对象、面向接口编程的设计模式:备忘录模式

背景

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


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全文索引等。


标签: 备忘录模式
共有 人打赏支持
粉丝 90
博文 239
码字总数 208862
×
learn_more
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: