当前位置:网站首页 > 技术博客 > 正文

备忘录分为哪两大类




文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。


本篇讲解备忘录模式。其实非常常见,就是我们常用的撤销模式。

当我们想让系统撤销回退到系统的某一个历史状态,就需要撤销功能,要能实现撤销就必须有所保存历史状态,然后进行覆盖。

备忘录模式(Memento Pattern)定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为模式,起别名Token。

这个模式就是提供了一种状态恢复的机制,现在很多撤销功能都是利用了备忘录模式。
模式中共有三个角色:1. 原发器(Originator):可以理解就是当前使用的对象,只不过在这个对象中有提供两个特殊方法(拍下当前对象的快照并返回,其次就是将某一个历史快照进行恢复)。2. 备忘录(Memento):这个其实就可以说是对象的空壳,当我们要保存历史状态时,就是将快照放置在这个载体上,而其实备忘录和原发器时非常相像的只是个别方法不同。3. 负责人(Craetaker):就是存储器,用来存储快照的。

其中备忘录类只面向原发器类,因为我们存储的快照载体就是备忘录类,如果这其中的接口对外暴露,这历史状态就有可能改变,那么就违背了我们撤销的目的。而实现这样的方式有两种。
1.将原发器和备忘录放在同一包下,同时设置备忘录为默认可见性,这时只有同一个包下才可以访问备忘录。
2.将备忘录作为原发器的内部类。

某系统提供了用户信息操作模块,用户可以修改自己的各项信息。为了使操作过程更加的人性化,现使用备忘录模式对系统进行改进,使得用户在进行了错误操作之后可以恢复到操作之前的状态。

关于上面情景的类图(具体分析在下面)
在这里插入图片描述

左边的UserInfoDTO就是用户类,右边的Memento就是备忘录就是一个载体,你会发现他们两者是非常相像的。下面的Caretaker就是存储状态的容器。

原发器UserInfoDTO(用户信息类)


                            

版权声明


相关文章:

  • 运维实施工程师是干嘛的2024-11-23 15:01:04
  • 颜色16进制代码表2024-11-23 15:01:04
  • 局部变量,成员变量,静态变量分别怎么声明2024-11-23 15:01:04
  • oracle 视图 rowid2024-11-23 15:01:04
  • vs2010安装步骤2024-11-23 15:01:04
  • xml转json的两种方法2024-11-23 15:01:04
  • redis 教程2024-11-23 15:01:04
  • 串口调试助手教程2024-11-23 15:01:04
  • java位运算左移右移2024-11-23 15:01:04
  • sqlsugar ioc2024-11-23 15:01:04