1 介绍
保存一个对象的某个状态,以便在适当的时候恢复对象。常用是例子就是游戏存档。
2 例子
游戏中一个角色要打boss,可能失败可能成功,需要把打boss前的自己状态进行存档。
2.1 需要存档的状态类
class State {
public int blood;
public int energy;
}
2.2 游戏角色类
class Hero {
private int blood = 100;
private int energy = 100;
//当然还有一些其他属性
//获得状态
public String getInfor() {
return "blood:" + blood + " energy:" + energy;
}
//获得人物存档
public State getState() {
State state = new State();
state.blood = this.blood;
state.energy = this.energy;
return state;
}
//从存档读入状态
public void loadState(State state) {
this.energy = state.energy;
this.blood = state.blood;
}
//打boss
public void bossWar() {
this.blood -= 70;
this.energy -= 80;
}
}
2.3 存档类
class Memento{
//存放的列表
private List<State> list=new ArrayList<State>();
//备忘
public void saveMemento(State state){
list.add(state);
}
//读入
public State getMomento(int index){
if(index<list.size()){
return list.get(index);
}
return null;
}
}
2.4 测试主类
public class Main {
public static void main(String[] args) {
//新建角色
Hero hero=new Hero();
//新建备忘
Memento memento=new Memento();
//打boss前
System.out.println("打boss前:");
System.out.println(hero.getInfor());
//一开始就备份
memento.saveMemento(hero.getState());
//打boss
hero.bossWar();
System.out.println("打完boss:");
System.out.println(hero.getInfor());
//恢复备份
hero.loadState(memento.getMomento(0));
System.out.println("恢复存档:");
System.out.println(hero.getInfor());
}
}
运行结果:
打boss前:
blood:100 energy:100
打完boss:
blood:30 energy:20
恢复存档:
blood:100 energy:100
3 总结
备忘录模式就是把一个类的状态进行存储,必要的时候进行恢复,主要是思想,具体实现可以根据具体的逻辑来,需要注意是,状态存储的信息尽可能要少,不要存储太过于冗余的信息。