实战java设计模式(二十)备忘录模式

1 介绍

保存一个对象的某个状态,以便在适当的时候恢复对象。常用是例子就是游戏存档。

2 例子

游戏中一个角色要打boss,可能失败可能成功,需要把打boss前的自己状态进行存档。

2.1 需要存档的状态类

class State {
    public int blood;
    public int energy;
}

2.2 游戏角色类

class Hero {
    private int blood = 100;
    private int energy = 100;
    //当然还有一些其他属性

    //获得状态
    public String getInfor() {
        return "blood:" + blood + " energy:" + energy;
    }

    //获得人物存档
    public State getState() {
        State state = new State();
        state.blood = this.blood;
        state.energy = this.energy;
        return state;
    }

    //从存档读入状态
    public void loadState(State state) {
        this.energy = state.energy;
        this.blood = state.blood;
    }

    //打boss
    public void bossWar() {
        this.blood -= 70;
        this.energy -= 80;
    }
}

2.3 存档类

class Memento{
    //存放的列表
    private List<State> list=new ArrayList<State>();

    //备忘
    public void saveMemento(State state){
        list.add(state);
    }
    //读入
    public State getMomento(int index){
        if(index<list.size()){
            return list.get(index);
        }
        return null;
    }
}

2.4 测试主类

public class Main {
    public static void main(String[] args) {
        //新建角色
        Hero hero=new Hero();
        //新建备忘
        Memento memento=new Memento();

        //打boss前
        System.out.println("打boss前:");
        System.out.println(hero.getInfor());

        //一开始就备份
        memento.saveMemento(hero.getState());
        //打boss
        hero.bossWar();
        System.out.println("打完boss:");
        System.out.println(hero.getInfor());

        //恢复备份
        hero.loadState(memento.getMomento(0));
        System.out.println("恢复存档:");
        System.out.println(hero.getInfor());
    }
}

运行结果:

打boss前:
blood:100 energy:100
打完boss:
blood:30 energy:20
恢复存档:
blood:100 energy:100

3 总结

备忘录模式就是把一个类的状态进行存储,必要的时候进行恢复,主要是思想,具体实现可以根据具体的逻辑来,需要注意是,状态存储的信息尽可能要少,不要存储太过于冗余的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值