备忘录模式(Memento):
在不破坏封装性的前提下,波或一个对象的内部状态,并在改对象之外保存这个状态。
这样以后就可以将改对象恢复到保存的状态。
很常见的一个情景就是在玩游戏的时候,可能某一次你连过8关,但是第9关很难,
于是你死了,当你再开始以为能直接打第9关时,发现没有保存游戏进度,于是你
又必须从第1关开始打。。。。
略杯具。
备忘录模式则可以很好的解决这个问题,它强调的是保存你所需要保存的数据。
下面先看类图:
我所将的备忘录模式这次仅仅包含3个类,
Originator:负责创建一个备忘录Memento,可以记录并且可以恢复。
Memento:负责存储Originator对象的内部状态,可以防止其他对象访问。
Caretaker:负责保存caretaker,可以理解为保存到硬盘中。
下面看具体类代码:
Memento类:
package com.blog.anla.Memento;
/**
* 备忘录类
* @author U-ANLA
*
*/
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;
}
}
Originator类:
package com.blog.anla.Memento;
/**
* 发起人类,保存多个属性, 可以创建备忘录,回复备忘录等等
*
* @author U-ANLA
*
*/
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento createMemento() {
return new Memento(state);
}
public void setMemento(Memento memento) {
state = memento.getState();
}
public void show() {
System.out.println("state:" + state);
}
}
Caretaker类:
package com.blog.anla.Memento;
/**
* 管理者,得到或者设置备忘录
* 但是没有生成memento的权限。
* @author U-ANLA
*
*/
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
备忘录更像在数据库里面的bean类,可以实例化,可以保存到数据库。
赠人玫瑰手留余香(oo)