设计模式——(19)备忘录模式

1、定义

在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。

备忘录模式的核心是备忘录类以及用于管理备忘录的负责人类的设计。

2、UML类图

(1)、类图

设计模式——(19)备忘录模式_第1张图片

  • Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。 

  • Memento(备忘录):存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用,原发器的设计在不同的编程语言中实现机制会有所不同。 

  • Caretaker(负责人):负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容进行操作或检查。在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节。

(2)、角色职责

原发器有如下责任:

  • 创建一个含有当前的内部状态的备忘录对象。

  • 使用备忘录对象存储其内部状态。

负责人角色有如下责任:

  • 负责保存备忘录对象。

  • 不检查备忘录对象的内容。

3、实例

4、优点

  • 提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。

  • 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。

  • 简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。

5、缺点

  • 资源消耗大,如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源。

6、使用场景

  • 需要保存和恢复数据的相关状态场景。

  • 提供一个可回滚(rollback)的操作;比如Word中的CTRL+Z组合键,IE浏览器中的后退按钮,文件管理器上的backspace键等。

  • 需要监控的副本场景中。例如要监控一个对象的属性,但是监控又不应该作为系统的主业务来调用,它只是边缘应用,即使出现监控不准、错误报警也影响不大,因此一般的做法是备份一个主线程中的对象,然后由分析程序来分析。

  • 数据库连接的事务管理就是用的备忘录模式

你可能感兴趣的:(设计模式,备忘录模式)