《Java设计模式及实践》—3.7 备忘录模式

举报
华章计算机 发表于 2019/07/22 13:30:55 2019/07/22
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第3章,第3.7节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

3.7 备忘录模式

封装是面向对象设计的基本原则之一。我们知道每个类都承担一项职责。当向对象添加功能时,我们可能意识到需要保存其内部状态,以便能够在以后阶段恢复它。如果直接在类中实现这样的功能,这个类可能会变得太复杂,最终可能会违反单一职责原则。同时,封装阻止我们直接访问需要记忆的对象的内部状态。

1.目的

备忘录模式用于保存对象的内部状态而不破坏其封装,并在以后阶段恢复其状态。

2.实现

备忘录模式依赖于三个类—Originator、Memento和Caretaker,如图3-8所示。

 image.png

图 3-8

备忘录模式依赖于以下类:

  • Originator(发起者):发起者是我们需要记住状态的对象,以便在某个时刻恢复它。

  • Caretaker(管理者):这是负责触发发起者的变化或触发发起者返回先前状态的动作的类。

  • Memento(备忘录):这是负责存储发起者内部状态的类。备忘录提供了两种设置和获取状态的方法,但这些方法应该对管理者隐藏。

备忘录实际上比听起来容易得多。我们将它应用于汽车服务应用程序。机械师必须测试每辆车。他们使用自动装置测量汽车的所有输出,以获得不同的参数(速度、挡位、制动器等)。他们执行所有测试并且必须重新检查那些看起来可疑的测试。

首先创建originator类,我们将它命名为CarOriginator,添加两个成员变量。state表示测试运行时汽车的参数,这是我们想要保存的对象的状态。第二个成员变量是结果,这是汽车的测量输出,我们不需要将其存储在备忘录中。这是带有空嵌套备忘录的发起者:

 image.png

 

现在我们为不同的状态运行汽车测试:

 image.png

image.png

 

3.适用情况

只要需要执行回滚操作,就会使用备忘录模式。它可用于各种原子事务,如果其中一个操作失败,则必须将对象恢复到初始状态。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。