文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。
本篇讲解备忘录模式。其实非常常见,就是我们常用的撤销模式。
当我们想让系统撤销回退到系统的某一个历史状态,就需要撤销功能,要能实现撤销就必须有所保存历史状态,然后进行覆盖。
备忘录模式(Memento Pattern)定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为模式,起别名Token。
这个模式就是提供了一种状态恢复的机制,现在很多撤销功能都是利用了备忘录模式。
模式中共有三个角色:1. 原发器(Originator):可以理解就是当前使用的对象,只不过在这个对象中有提供两个特殊方法(拍下当前对象的快照并返回,其次就是将某一个历史快照进行恢复)。2. 备忘录(Memento):这个其实就可以说是对象的空壳,当我们要保存历史状态时,就是将快照放置在这个载体上,而其实备忘录和原发器时非常相像的只是个别方法不同。3. 负责人(Craetaker):就是存储器,用来存储快照的。
其中备忘录类只面向原发器类,因为我们存储的快照载体就是备忘录类,如果这其中的接口对外暴露,这历史状态就有可能改变,那么就违背了我们撤销的目的。而实现这样的方式有两种。
1.将原发器和备忘录放在同一包下,同时设置备忘录为默认可见性,这时只有同一个包下才可以访问备忘录。
2.将备忘录作为原发器的内部类。
某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加的人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。
关于上面情景的类图(具体分析在下面)
左边的UserInfoDTO就是用户类,右边的Memento就是备忘录就是一个载体,你会发现他们两者是非常相像的。下面的Caretaker就是存储状态的容器。
原发器UserInfoDTO(用户信息类)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/5608.html