美文网首页Linux学习|Gentoo/Arch/FreeBSDLinux读书笔记
大话设计模式读书笔记-18备忘录模式

大话设计模式读书笔记-18备忘录模式

作者: QuietHeart | 来源:发表于2020-04-14 11:44 被阅读0次
bigtalk.jpg

第18章 如果再回到从前——备忘录模式

概念

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

实现

包括:

  • 一个对象类(Originator), 包含当前状态、一个类似 Save() 的接口(创建备忘录保存当前状态)、以及一个类似 recover() 的接口(恢复指定备忘录中的状态)
  • 一个备忘录类(Memento), 包含被保存对象的内部状态(全部或者部分),也可防止其它对象访问该状态。有两个接口,窄接口(Caretaker访问提供其它对象该对象的部分状态,宽接口(对象访问全部状态)。
  • 一个管理备忘录的类(Caretaker),负责保存保存好的备忘录。

其实,Caretaker和Originator是客户端看到的部分,而Memento是Caretaker中的一个成员(可以简单将Caretaker理解为Memento集合,里面包含多个需要保存恢复的备忘录)。

备忘录模式类图:

img

备忘录模式使用:

img

场景

适用场合:功能复杂需要维护或记录历史属性的类,比如有些工具中的撤销、还原,游戏中的存进度等。

注意,对象的状态必须对应的对象才能读取,不要破坏封装性(即,备忘录内的数据不能直接查询和修改。而比如创建对象副本的话,还要一个一个复制成员实现恢复,对象副本又能被修改这就破坏了封装性),除非想共享一些属性,比如敌人的血量等等。备忘录有些时候在磁盘中,有些时候在内存中。

总之是在对象外部保存存储,由对象读取恢复。

相关文章

网友评论

    本文标题:大话设计模式读书笔记-18备忘录模式

    本文链接:https://www.haomeiwen.com/subject/xuvhphtx.html