16.设计模式--备忘录模式(Memento模式)
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
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十