(20)备忘录模式
概念
备忘录主要用于记录状态,便于回滚,常用于记录快照,或者存储数据到磁盘。当数据发生问题时,再从磁盘读取当初存档的数据还原。
例如我玩个游戏,打boos前我有1000血,1000魔法,我希望打boos之前保存我现在的状态,当打不过时,还能还原成初始状态
实现方式
import lombok.Data;
/**
* 备忘录
*/
public class Demo {
public static void main(String[] args) {
GameRole gameRole = new GameRole();
System.out.println("==== 打怪前====");
gameRole.print();
Memento memento = gameRole.save();// 保存当前的状态
System.out.println("==== 打怪后 ====");
gameRole.setHp(0);
gameRole.setMp(0);
gameRole.print();
System.out.println("==== 读档恢复 ====");
gameRole.read(memento);
gameRole.print();
}
}
// 游戏角色
@Data
class GameRole {
private int hp;// 血量
private int mp;// 魔法量
public GameRole() {
this.hp = 1000;
this.mp = 1000;
}
// 存档
public Memento save() {
return new Memento(hp, mp);
}
// 读档
public void read(Memento memento) {
this.hp = memento.getHp();
this.mp = memento.getMp();
}
public void print() {
System.out.println(String.format("当前HP为%s -- MP为%s", hp, mp));
}
}
// 备忘录,记录某一时刻的快照信息
@Data
class Memento {
private int hp;// 血量
private int mp;// 魔法量
public Memento(int hp, int mp) {
this.hp = hp;
this.mp = mp;
}
}
==== 打怪前====
当前HP为1000 -- MP为1000
==== 打怪后 ====
当前HP为0 -- MP为0
==== 读档恢复 ====
当前HP为1000 -- MP为1000