JAVA设计模式-备忘录模式-以游戏存档为例

介绍

备忘录模式的定义

备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

这个模式的定义很好理解。其实就是备份数据,方便后续恢复,这里我们直接看案例。

案例

假如我们现在正在玩一款名为rim world的游戏,该游戏具有游戏数据,我们需要定时存档。这里需要一个类来专门管理存档,因为我们可能需要回退至不同时间的存档。

存档类

@Data
//存档类
public class Save {
    //这里简单化,假设只有存档名
    String name;

    public Save(String name) {
        this.name = name;
    }

}

存档管理类

public class Memorandum {
    HashMap<String,Save> saveHashMap=new HashMap<>();
    public void add(Save save)
    {
        if(save.getName()==null){
            System.out.println("存档错误");
            return;
        }
        if(saveHashMap.get(save.getName())!=null){
            System.out.println("即将覆盖存档");
        }
        saveHashMap.put(save.getName(),save);
    }
    public Save getSave(String name){
        return saveHashMap.get(name);
    }
}

游戏类

//游戏类
public class RimWorld {
    //保存存档,这里应该要将游戏数据写入存档中,不过没有设计
    public Save save(String name)
    {
        return new Save(name);
    }
    //读取存档,当然,因为我们没有设计存档内容,所以这里什么都不用处理
    public void loadSave(Save save){
    }
}

测试

  @Test
    public void test()
    {
        //创建一个游戏
        RimWorld rimWorld=new RimWorld();
        //游戏存档保存
        Save save = rimWorld.save("存档1");
        Memorandum memorandum=new Memorandum();
        memorandum.add(save);
        System.out.println(memorandum.getSave("存档1").getName()+"已保存");

        //读取存档
        Save save1 = memorandum.getSave("存档1");
        rimWorld.loadSave(save1);
        System.out.println(save1.getName()+"已读取");
    }

测试结果

存档1已保存
存档1已读取
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值