前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >16.设计模式--备忘录模式(Memento模式)

16.设计模式--备忘录模式(Memento模式)

作者头像
大猫的Java笔记
发布2021-11-18 13:18:52
4130
发布2021-11-18 13:18:52
举报
文章被收录于专栏:大猫的Java笔记大猫的Java笔记

1.定义

备忘录模式也是一种行为型模式,主要用于捕获一个对象的内部状态,以便在将来的某个时候恢复此状态。

在使用文本编辑器的时候,我们可以对内容进行新增、删除、编辑等处理,由于可能人为操作问题出现错误操作这个时候就有了撤销功能。实际上就是在将来的耨个时候恢复此状态。

2.备忘录模式结构图

TextEdit定义为文档编辑器,其中引用了TextEditMemento用于记录之前的状态,同时拥有自己的方法编辑、保存(只是方便记录状态而抽出来的方法,并不是对整个文档进行保存)、追加、撤销等方法。

TextEditMemento就是备忘录,其中使用了Stack栈来记录状态,而undo则是撤销功能,save用于记录状态。

3.备忘录模式实现

TextEdit中,对追加和更新文本内容的方法都会调用TextEditMemento的保存方法,用于记录状态值,方便后续的撤销动作。

TextEditMemento中使用Stack栈,用于记录之前的状态,首先撤销的逻辑就是类似于栈,先进后出。先做的步骤一般要撤销几次才能撤销回去,所以采用栈。

下面对文档进行一个测试,尝试对文档进行追加文字以及撤销等动作。实际效果如下所示。

备忘录模式存在的意义

从代码来看备忘录模式似乎没有任何意义,如果单纯的只是保存一个状态值,实际上在TextEdit中也能做,但是实际上如果在TextEdit中做了,那么就违背了单一职责原则。TextEdit应该只是负责文本的编辑、更新等操作,而至于记录快照等都应该是TextEditMemento来处理。

如果将来需要在TextEdit中增加新功能,例如清空操作,虽然只是加一个方法,但是实际上TextEdit已经发生了变化,如果使用备忘录模式是不需要管TextEditMemento的。如果写在一起此时如果测试需要测试代码,那么整个功能都是需要进行测试的,原因是即使你只改了TextEdit,但是实际上这两个功能是包含在一起的。

参考文献《图解设计模式》

代码获取地址:https://gitee.com/bughong/design-pattern

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档