Skip to content

备忘录模式

基础概念

什么是备忘录模式?

答案: 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复到原先保存的状态。

使用场景

  • 需要保存对象的历史状态
  • 需要实现撤销功能

优点

  • 提供状态恢复机制
  • 实现封装

缺点

  • 消耗资源

实现方式

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

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

    public String getState() {
        return state;
    }
}

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

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

    public String getState() {
        return state;
    }

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

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

// 管理者
public class Caretaker {
    private List<Memento> mementoList = new ArrayList<>();

    public void add(Memento memento) {
        mementoList.add(memento);
    }

    public Memento get(int index) {
        return mementoList.get(index);
    }
}

// 使用
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();

originator.setState("状态1");
caretaker.add(originator.saveStateToMemento());

originator.setState("状态2");
caretaker.add(originator.saveStateToMemento());

originator.getStateFromMemento(caretaker.get(0));
System.out.println(originator.getState());  // 状态1

练习题

  1. 备忘录模式的应用场景?
  2. 如何优化备忘录的存储?
  3. 备忘录模式和原型模式的区别?

Released under the MIT License.