备忘录模式又叫作快照模式,该模式将当前对象的内部状态保存到备忘录中,以便在需要时能将该对象的状态恢复到原先保存的状态。

备忘录模式提供了一种保存和恢复状态的机制,常用于快照的记录和状态的存储,在系统发生故障或数据发生不一致时能够方便地将数据恢复到某个历史状态。

备忘录模式的核心是设计备忘录类及用于管理备忘录的管理者类,其主要角色如下:

  • 发起人(Originator):记录当前时刻对象的内部状态,定义创建备忘录和恢复备忘录数据的方法。
  • 备忘录(Memento):负责存储对象的内部状态。
  • 状态管理者(Storage):对备忘录的历史状态进行存储,定义了保存和获取备忘录状态的功能。注意,备忘录只能被保存或恢复,不能进行修改。

UML设计图如下:

1)Original 原始数据类:

public class Original {private String value;public Original(String value) {this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}public Memento createMemento() {return new Memento(value);}public void restoreMemento(Memento memento) {this.value = memento.getValue();}}

2)Memento 备忘录类:

public class Memento {private String value;public Memento(String value) {this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}

3)Storage 备忘录管理类:

public class Storage {private Memento memento;public Storage(Memento memento) {this.memento = memento;}public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento = memento;}}

4)测试备忘录模式:

@Slf4jpublic class MementoDemoTest {public static void main(String[] args) {Original original = new Original("Jobs");Storage storage = new Storage(original.createMemento());log.info("original value : " + original.getValue());original.setValue("Jordan");log.info("updated value : " + original.getValue());original.restoreMemento(storage.getMemento());log.info("restore value : " + original.getValue());}}

打印结果: