理解名词
备忘录模式(Memento Design Pattern)是一种行为型模型,在 GoF《设计模式》中定义如下:
Captures and externalizes an object’s internal state so that it can be restored later, all without violating encapsulation.在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。
我们平时需要临时记录一些信息会用到备忘录,需要的时候翻看备忘录就能获取之前记录的信息。备忘录模式在程序中就是用来记录一些程序运行中间状态,在需要的时候进行回滚或者重做。
作用
保存对象的状态,并解耦对象与对象状态的管理。
适用场景
需要记录对象的状态,以支持回滚,重做等操作。
代码示例
定义备忘录类
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
定义一个类,它拥有自己的状态属性,可以保存自己的状态以及恢复到之前的状态
public class Originator {
private String state;
private Caretaker caretaker;
/** 保存当前状态 */
public void saveMemento(){
caretaker.storeMemengto(new Memento(state));
}
/** 恢复到前一个状态 */
public void restore(){
this.state = caretaker.restoreMemento().getState();
}
}
定义备忘录管理者类,负责保存与管理备忘录对象
public class Caretaker {
private Stack<Memento> mMemento;
public Memento restoreMemento(){
return mMemento.pop();
}
public void storeMemengto(Memento memento){
mMemento.push(memento);
}
}
业界经典实现
- Android Activity