备忘录模式(Memento Pattern)

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

本例所在情景:
打游戏时已经达到了经验值、战斗值、生命值等各项最高,此时做一个备忘录(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值