备忘录模式(Memento Pattern)又叫作快照模式(Snapshot Pattern)或令牌模式(TokenPattern),指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态,属于行为型设计模式。
场景
- 保存和恢复相关状态场景
- 需要备份和回滚

- Originator 发起人
- Memento 备忘录,存储Originator的内部状态,并且放逐Orginator之外的对象访问(Memento实现类应该作为Originator的内部类)
- Caretaker 备忘录管理器,存储和管理Memento,但无法对Memento的内容进行操作和访问。 ``` public interface IMemento {
} public class Originator {
private String state;public String getState() {return state;}public void setState(String state) {this.state = state;System.out.println("state改变"+this.state);}public IMemento createMemento(){return new Memento(this.state);}public void restoreFromMemento(IMemento memento){this.state = ((Memento)memento).getState();System.out.println("state回滚"+this.state);}static class Memento implements IMemento{private String state;private Memento(String state) {this.state = state;}private String getState() {return state;}private void setState(String state) {this.state = state;}}
}
public class Caretaker {
private IMemento memento;public IMemento getMemento() {return memento;}public void setMemento(IMemento memento) {this.memento = memento;}
}
``` Caretaker内部实现为集合类可以实现多版本控制
克隆方式(原型模式)实现备忘录模式
优点
- 提供回滚
- 隔离状态的存储与获取
缺点
- 消耗内存,可以使用lru淘汰
