一、背景
记得以前玩游戏的时候,在打大boss之前,都会一路打小兵,打小boss,最后才会遇到大boss。但是我们可能不会一下打到大boss那里,中途可能有事或休息一下,那下次再来的时候我不可能再重头开始打吧,那样玩家肯定都不会再玩这款游戏了。那怎么办呢?当然是把我们玩的状态通过备忘录保存下来啊,下次再玩的时候读取备忘录的状态继续从我们之前停下的地方开始玩。这既是我们的备忘录模式。
二、概念
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。
三、代码示例
/**
* 原始对象类(备忘录发起角色)
*/
class Original {
private String name;
public Original(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Memento createMemento() {// 创建备忘录方法
return new Memento(name);
}
public void restore(Memento memento) {// 恢复方法
this.name = memento.getValue();
}
}
/**
* 备份类(备忘录角色)
*/
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;
}
}
/**
*存储类(备忘录管理角色)
*/
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 MementoPatternDemo {
public static void main(String[] args) {
Original original = new Original("hello");// 创建原始对象
Storage storage = new Storage(original.createMemento());// 创建备忘录
System.out.println("初始化状态为:" + original.getName());
// 修改原始类对象的属性
original.setName("Hi");
System.out.println("修改后状态为:" + original.getName());
// 恢复原始状态
original.restore(storage.getMemento());
System.out.println("恢复后状态为:" + original.getName());
}
}
四、总结
1.备忘录模式由 备忘录发起角色 、备忘录角色及备忘录管理角色构成。发起角色负责创建和读取备忘录,备忘录负责保存发 起角色的状态,备忘录管理角色负责存储备忘录。
2.备忘录模式适用于需要备份恢复的场景中。