1、思想
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。以打游戏为例,将打boss之前的状态保存到备忘录里。打完boss状态会发生改变,如果感觉与boss决斗不理想,可以通过备忘录恢复初始状态,从而重新打boss。
2、代码
package 测试;
/**
* 发起人类,例如游戏玩家
* @author Administrator
*
*/
class Originator{
private String state;
public Memento createMemento(){
return (new Memento(state));
}
public void setMemento(Memento memento){
state = memento.getState();
}
public void show(){
System.out.println("state:"+state);
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
/**
* 备忘录类
* @author Administrator
*
*/
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 Administrator
*
*/
class Caretaker{
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
public class Main5{
public static void main(String [] args){
Originator o = new Originator();
o.setState("on");
o.show();
Caretaker c = new Caretaker();
c.setMemento(o.createMemento());
//游戏玩家改变状态
o.setState("off");
o.show();
//游戏玩家恢复原来的状态
o.setMemento(c.getMemento());
o.show();
}
}
3、结构图