概念
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。
使用场景
- 需要保存对象在某个时刻的状态,提供可以恢复状态的机制
- 一个对象不希望外界直接访问其内部状态,要通过中间对象来间接访问
实现方式
- Originator —— 发起人角色,创建备忘录,用于记录恢复自身内部状态,也包含业务逻辑
- Memento —— 备忘录角色,用于存储Originator内部状态,可以防止Originator以外的对象访问Memento
- Caretaker—— 存储备忘录容器,不能操作访问备忘录内容,只将备忘录传给其他对象
public class Originator{
private int state;
// 创建备忘录
public Memento createMemento(){
Memento m= new Memento();
m.mState = this.state;
return m;
}
// 恢复状态
public void restore(Memento m){
this.state = m.mState;
}
// 业务逻辑
public void play(int n){
state = n;
}
}
public class Memento {
public int mState;
public void setState(int state){
mState = state;
}
public int getState(){
return mState;
}
}
public class Caretaker {
Memento m;
public void setMemento(Memento state){ //存档
m = state;
}
public Memento getMemento(){
return m;
}
}
public class Test {
public static void main(String[] args){
Originator game = new Originator();
game.play(3); //打三分钟游戏
Caretaker c = new Caretaker();
c.setMemento(game.createMemento()); //存档
Originator newgame = new Originator(); //重新游戏
newgame.restore(c.getMemento()); //恢复游戏数据
}
}