备忘录

39 阅读1分钟

备忘录模式(Memento Pattern)是一种行为型模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在以后将其恢复。

备忘录模式的主要角色如下:

  • 发起人(Originator):负责创建备忘录,并在需要时恢复备忘录。
  • 备忘录(Memento):存储发起人对象的内部状态。
  • 管理者(Caretaker):负责保存备忘录。

备忘录模式的实现如下:

// 发起人
public class Originator {
  private String state;

  public void setState(String state) {
    this.state = state;
  }

  public Memento createMemento() {
    return new Memento(state);
  }

  public void restoreMemento(Memento memento) {
    this.state = memento.getState();
  }
}

// 备忘录
public class Memento {
  private String state;

  public Memento(String state) {
    this.state = state;
  }

  public String getState() {
    return state;
  }
}

// 管理者
public class Caretaker {
  private Memento memento;

  public void setMemento(Memento memento) {
    this.memento = memento;
  }

  public Memento getMemento() {
    return memento;
  }
}

public class Main {
  public static void main(String[] args) {
    // 创建发起人
    Originator originator = new Originator();

    // 设置状态
    originator.setState("状态1");

    // 创建备忘录
    Memento memento = originator.createMemento();

    // 保存备忘录
    Caretaker caretaker = new Caretaker();
    caretaker.setMemento(memento);

    // 修改状态
    originator.setState("状态2");

    // 恢复状态
    originator.restoreMemento(caretaker.getMemento());

    // 输出状态
    System.out.println(originator.getState());
  }
}

输出:

状态1

备忘录模式的优点如下:

  • 提供了一种在不破坏封装性的前提下保存和恢复对象内部状态的方式。
  • 可以用于实现撤销/重做操作。

备忘录模式的应用场景如下:

  • 需要在撤销/重做操作时保存对象的内部状态时。
  • 需要在后台线程操作对象的内部状态,而不能影响用户操作时。

备忘录模式的注意事项如下:

  • 备忘录对象应该尽量小,只保存需要恢复的状态信息。
  • 备忘录对象应该尽量不可变,以便在恢复时不会对原始对象造成影响。