大家好,欢迎来到IT知识分享网。
一、概念
备忘录模式(Memento Pattern)又称之为快照模式(Snapshop Pattern)
或者令牌模式(Token Pattern)
,是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样我们就可以在需要的时候将该对象恢复到原先保存的状态了
- 大白话: 备忘录模式可以为我们提供一种“后悔药”的机制,它通过存储程序中某个对象的历史状态,使我们可以在任一时刻将程序回滚到历史状态。
- 核心:使用第三方角色保存某个对象内部状态的拷贝,便于将该对象恢复到原先的状态
二、适用场景
- 需要保存/恢复数据的相关状态场景。
- 提供一个可回滚的操作。
- 希望在对象之外保存状态,且除了自己其他对象无法访问状态的具体保存内容
三、参与者
- 发起人角色/被备份的角色(Originator):负责创建一个备忘录,记录自身需要保存的状态,而且需要具备状态的回滚功能。
- 备忘录角色(Memento):用于存储Originator角色的内部状态,且可以防止Originator以外的对象进行访问Memento。
- 负责人角色/备忘录管理员角色(Caretaker):负责存储,管理备忘录功能。且其本身应该无法对备忘录的内容进行访问
- Client 用户
四、代码例子
一个Shell软件可以通过它执行一些命令,当执行完命令后我们可能想找回之前执行过的指令文本,相当于我们在操作linux命令窗口时按↑ \uparrow↑和↓ \downarrow↓按钮时会可以控制显示之前输入的命令行,恢复好命令后再次按回车即可执行
- 发起人角色/被备份的角色(Originator):LinuxShell
- 备忘录角色(Memento):Memo
- 负责人角色/备忘录管理员角色(Caretaker):MemoContainer
五、UML图
(一)“白箱”备忘录模式
(二)“黑箱”备忘录模式
六、优缺点
(一)优点
- 它提供了一种
状态恢复的实现机制
,使得用户可以方便地回到一个特定的历史状态,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。 - 简化了发起人角色的的职责,将状态的存储和获取进行了隔离,而且客户端无需关心状态的
保存细节
。 - 备忘录角色是一种
发起人角色
状态的表示,不会被其他代码所改动。备忘录角色保存了发起人角色
的状态,采用列表、堆栈
等集合来存储备忘录对象可以实现多次撤销操作
。
(二)缺点
- 消耗过大,如果需要保存的发起人角色类的成员变量太多,就不可避免需要占用大量的存储空间,每保存一次对象的状态都需要消耗一定的系统资源。
- 为了节约内存,可使用
原型模式+备忘录模式。
- 为了节约内存,可使用
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29402.html