备忘录模式(Memento Pattern)

来源:互联网 发布:网络认证发票登录密码 编辑:程序博客网 时间:2024/05/14 00:05

备忘录模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

本例所在情景:
打游戏时已经达到了经验值、战斗值、生命值等各项最高,此时做一个备忘录(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();    }}

结果如下:
这里写图片描述

0 0