备忘录模式实例_备忘录memo

备忘录模式实例_备忘录memo一、概念备忘录模式(MementoPattern)又称之为快照模式(SnapshopPattern)或者令牌模式(TokenPattern),是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样我们就可以在需要的时候将该对象恢复到原先保存的状态了大白话:备忘录

大家好,欢迎来到IT知识分享网。

一、概念

备忘录模式(Memento Pattern)又称之为快照模式(Snapshop Pattern)或者令牌模式(Token Pattern),是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样我们就可以在需要的时候将该对象恢复到原先保存的状态了

  • 大白话: 备忘录模式可以为我们提供一种“后悔药”的机制,它通过存储程序中某个对象的历史状态,使我们可以在任一时刻将程序回滚到历史状态。
  • 核心:使用第三方角色保存某个对象内部状态的拷贝,便于将该对象恢复到原先的状态

二、适用场景

  1. 需要保存/恢复数据的相关状态场景。
  2. 提供一个可回滚的操作。
  3. 希望在对象之外保存状态,且除了自己其他对象无法访问状态的具体保存内容

三、参与者

  • 发起人角色/被备份的角色(Originator):负责创建一个备忘录,记录自身需要保存的状态,而且需要具备状态的回滚功能。
  • 备忘录角色(Memento):用于存储Originator角色的内部状态,且可以防止Originator以外的对象进行访问Memento。
  • 负责人角色/备忘录管理员角色(Caretaker):负责存储,管理备忘录功能。且其本身应该无法对备忘录的内容进行访问
  • Client 用户

四、代码例子

一个Shell软件可以通过它执行一些命令,当执行完命令后我们可能想找回之前执行过的指令文本,相当于我们在操作linux命令窗口时按↑ \uparrow↑和↓ \downarrow↓按钮时会可以控制显示之前输入的命令行,恢复好命令后再次按回车即可执行

  • 发起人角色/被备份的角色(Originator):LinuxShell
  • 备忘录角色(Memento):Memo
  • 负责人角色/备忘录管理员角色(Caretaker):MemoContainer

五、UML图

(一)“白箱”备忘录模式

备忘录模式实例_备忘录memo

(二)“黑箱”备忘录模式

备忘录模式实例_备忘录memo

六、优缺点

(一)优点

  1. 它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史状态,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。
  2. 简化了发起人角色的的职责,将状态的存储和获取进行了隔离,而且客户端无需关心状态的保存细节
  3. 备忘录角色是一种发起人角色状态的表示,不会被其他代码所改动。备忘录角色保存了发起人角色的状态,采用列表、堆栈等集合来存储备忘录对象可以实现多次撤销操作

(二)缺点

  • 消耗过大,如果需要保存的发起人角色类的成员变量太多,就不可避免需要占用大量的存储空间,每保存一次对象的状态都需要消耗一定的系统资源。
    • 为了节约内存,可使用 原型模式+备忘录模式。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29402.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信