备忘录模式(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
    评论
标准备忘录模式Memento Pattern)是一种行为型设计模式,它允许在不暴露对象实现细节的情况下保存和恢复对象的内部状态。下面是一个简单的Java代码实现: ```java // 备忘录类 class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } } // 原始类 class Originator { private String state; public void setState(String state) { this.state = state; } public String getState() { return state; } public Memento saveStateToMemento() { return new Memento(state); } public void getStateFromMemento(Memento memento) { state = memento.getState(); } } // 管理者类 class CareTaker { private List<Memento> mementoList = new ArrayList<>(); public void add(Memento state) { mementoList.add(state); } public Memento get(int index) { return mementoList.get(index); } } // 测试类 public class MementoPatternDemo { public static void main(String[] args) { Originator originator = new Originator(); CareTaker careTaker = new CareTaker(); originator.setState("State #1"); originator.setState("State #2"); careTaker.add(originator.saveStateToMemento()); originator.setState("State #3"); careTaker.add(originator.saveStateToMemento()); originator.setState("State #4"); System.out.println("Current State: " + originator.getState()); originator.getStateFromMemento(careTaker.get(0)); System.out.println("First saved State: " + originator.getState()); originator.getStateFromMemento(careTaker.get(1)); System.out.println("Second saved State: " + originator.getState()); } } ``` 在上面的例子中,原始类`Originator`保存了一个内部状态`state`,并实现了创建备忘录对象、从备忘录对象恢复状态的方法。备忘录类`Memento`保存了原始类的某个状态。管理者类`CareTaker`负责保存备忘录对象,以便在需要的时候从中取出。测试类`MementoPatternDemo`是一个简单的使用例子,它将原始类的状态进行了多次修改,并保存了多个备忘录对象,最后通过管理者类从备忘录对象中恢复了原始类的状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值