设计模式之备忘录模式(Memento)
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。
备忘录模式属于行为型模式。
优点
- 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
- 实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点
- 如果类的成员变量过多,那么占用的资源比较多,这样会消耗多的内存。
Java 备忘录模式(Memento)示例
- 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;
}
}
- Original 原始数据类
public class Original {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Original(String value) {
this.value = value;
}
public Memento createMemento(){
return new Memento(value);
}
public void restoreMemento(Memento memento){
this.value = memento.getValue();
}
}
- 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;
}
}
- 测试类
public class App {
public static void main(String[] args) {
// 创建原始类
Original origi = new Original("pangugle");
// 创建备忘录
Storage storage = new Storage(origi.createMemento());
// 修改原始类的状态
LogHelper.log("初始化状态为:" + origi.getValue());
origi.setValue("baidu");
LogHelper.log("修改后的状态为:" + origi.getValue());
// 回复原始类的状态
origi.restoreMemento(storage.getMemento());
LogHelper.log("恢复后的状态为:" + origi.getValue());
}
}
运行结果为
【www.pangugle.com】- 初始化状态为:pangugle
【www.pangugle.com】- 修改后的状态为:baidu
【www.pangugle.com】- 恢复后的状态为:pangugle