设计模式之备忘录模式(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