定义:在不破坏对象封装的前提下,捕获对象内部的状态,并在该对象之外保存这个状态,以便后面恢复,这个重点是在对象之外保存这个状态。
网上的一个例子:
package memento; /** *create by datao.wang 2014-2-8-上午11:16:50 */ public class Client { public static void main(String[] args){ Originator originator = new Originator(); originator.setState("状态1"); System.out.println("初始状态:"+originator.getState()); Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemento()); originator.setState("状态2"); System.out.println("改变后状态:"+originator.getState()); originator.restoreMemento(caretaker.getMemento()); System.out.println("恢复后状态:"+originator.getState()); } } class Originator { private String state ="1"; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memento createMemento(){ //备忘 return new Memento(this.state); } public void restoreMemento(Memento memento){//恢复 this.setState(memento.getState()); } } /** * @author wdt * 备忘录 存储状态 */ 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; } } /** * @author wdt * 状态管理者 ,管理状态,用于恢复 */ class Caretaker { private Memento memento; public Memento getMemento(){ return memento; } public void setMemento(Memento memento){ this.memento = memento; } }
应用场景:
1、ctrl+z 记事本或文档中的恢复操作。
缺点:耗费资源。