菜鸟骑士挑战Boss,无奈实力悬殊至饮恨而终。不过好在单挑Boss前有“存档”,“嘿嘿,Boss,我们再来打过!”
备忘录模式用于记录某对象某一时刻的状态,比如对象在该时刻的某一属性值,便于读取“进度”。
基本结构如下
①、需要被记录的对象(菜鸟骑士)
一些属性Fields
备忘录的引用
②、备忘录
属性Memory(用于记忆对象的属性)
③、备忘中心
备忘录的引用
Ps:最主要的操作在于,对象将“存储自身信息的备忘”传递给备忘中心
实例代码: 以骑士单挑Boss为例
①、需要被记录的对象#########################################
/**
* 游戏角色
*/
public class GameRole {
public int life; //生命力
public int attack; //攻击力
public int defense; //防御力
public Memento memento; //备忘录
public Memento createMemento(){ //创建备忘
return new Memento(life,attack,defense); //通过备忘的构造方法将属性备份
}
public GameRole(){//初始值,状态全满
this.life = 100;
this.attack = 100;
this.defense = 100;
}
public void afterFight(){//战斗后
this.life = 0;
this.attack = 0;
this.defense = 0;
}
public void getHistory(Center c){ //读取进度,取出备忘中心的备忘,并将属性恢复
this.life = c.memento.getStatu()[0];
this.attack = c.memento.getStatu()[1];
this.defense = c.memento.getStatu()[2];
}
public void showStatus(){ //状态展示
System.out.println("生命力:"+life);
System.out.println("攻击力:"+attack);
System.out.println("防御力:"+defense);
}
}
②、备忘录#########################################
/**
* 备忘录
*/
public class Memento {
private int[] statu; //属性值
public Memento(int...statu){ //构造函数记忆属性值
this.statu = statu;
}
public int[] getStatu() {
return statu;
}
public void setStatu(int[] statu) {
this.statu = statu;
}
}
③、备忘中心#########################################
/**
* 备忘中心
*/
public class Center {
public Memento memento; //备忘录
}
测试方法:
public class Test {
public static void main(String[] args) throws Exception {
GameRole knight = new GameRole();
System.out.println("——战斗前——");
knight.showStatus();
Center c = new Center();
c.memento = knight.createMemento();
System.out.println("——战斗后——");
knight.afterFight();
knight.showStatus();
System.out.println("——读取进度——");
knight.getHistory(c);
knight.showStatus();
}
}
运行结果:
——战斗前——
生命力:100
攻击力:100
防御力:100
——战斗后——
生命力:0
攻击力:0
防御力:0
——读取进度——
生命力:100
攻击力:100
防御力:100