备忘录模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
本例所在情景:
打游戏时已经达到了经验值、战斗值、生命值等各项最高,此时做一个备忘录(RoleState)保存这个时候的状态,如果战斗(Fight())之后各项值降低了,则通过备忘录将其恢复
Role类
package src2;
public class Role {
private int shengmingzhi;
private int zhandouzhi;
private int jingyanzhi;
public Role(int shengmingzhi, int zhandouzhi, int jingyanzhi) {
super();
this.shengmingzhi = shengmingzhi;
this.zhandouzhi = zhandouzhi;
this.jingyanzhi = jingyanzhi;
}
public RoleState SaveRole(){
return (new RoleState(this.shengmingzhi,this.zhandouzhi,this.jingyanzhi));
}
public void RecoverState(RoleState rolestate){
this.shengmingzhi = rolestate.getZ1();
this.zhandouzhi = rolestate.getZ2();
this.jingyanzhi = rolestate.getZ3();
}
public void Fight(){
this.shengmingzhi = shengmingzhi - 1;
this.zhandouzhi = zhandouzhi - 1;
this.jingyanzhi = jingyanzhi - 1;
}
public void Show(){
System.out.println(this.shengmingzhi);
System.out.println(this.zhandouzhi);
System.out.println(this.jingyanzhi);
}
}
RoleState类
package src2;
public class RoleState {
private int Z1;
private int Z2;
private int Z3;
public RoleState(int a,int b,int c){
this.Z1 = a;
this.Z2 = b;
this.Z3 = c;
}
public int getZ1() {
return Z1;
}
public void setZ1(int z1) {
Z1 = z1;
}
public int getZ2() {
return Z2;
}
public void setZ2(int z2) {
Z2 = z2;
}
public int getZ3() {
return Z3;
}
public void setZ3(int z3) {
Z3 = z3;
}
}
RoleStateManager类
package src2;
public class RoleStateManager {
private RoleState statesave;
public RoleState getStatesave() {
return statesave;
}
public void setStatesave(RoleState statesave) {
this.statesave = statesave;
}
}
客户端代码
package src2;
public class t1 {
public static void main(String[] args) {
Role r1 = new Role(99, 99, 99);
RoleStateManager RSM = new RoleStateManager();
RSM.setStatesave(r1.SaveRole());
r1.Fight();
System.out.println("恢复前的各项值:");
r1.Show();
r1.RecoverState(RSM.getStatesave());
System.out.println("恢复后的各项值:");
r1.Show();
}
}
结果如下: