备忘录模式

备忘录模式

备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。

案例

每次玩游戏时从服务器读取存档,退出后保存存档

存档类:

java 复制代码
public class GameRecoder {
    Integer id;
    Integer level;

    public GameRecoder(Integer id, Integer level) {
        this.id = id;
        this.level = level;
    }

    @Override
    public String toString() {
        return "GameRecoder{" +
                "id=" + id +
                ", level=" + level +
                '}';
    }
}

服务器:

java 复制代码
public class GameServer {
    Map<Integer,GameRecoder> map = new HashMap<>();
    int cur = 0;

    {
        cur++;
        GameRecoder gameRecoder = new GameRecoder(cur, 1);
        map.put(cur,gameRecoder);

    }

    public void addRecord(Integer level){
        cur++;
        GameRecoder gameRecoder = new GameRecoder(cur, level);
        map.put(cur,gameRecoder);
        System.out.println("添加存档:"+gameRecoder);
    }

    public GameRecoder getRecord(){
        System.out.println("读取存档:"+map.get(cur));
        return map.get(cur);
    }
}

游戏:

java 复制代码
public class MyGame {
    private Integer level;

    GameServer server = new GameServer();

    public void play(){
        GameRecoder record = server.getRecord();
        level = record.level;
        System.out.println("开始游戏,当前等级:"+level);
        level++;
    }

    // 存档
    private void save(){
        server.addRecord(level);
    }

    public void exit(){
        System.out.println("退出游戏");
        save();
    }
}

测试:

java 复制代码
public class Main {
    public static void main(String[] args) {
        MyGame myGame = new MyGame();
        myGame.play();

        myGame.exit();
        myGame.play();
    }
}
相关推荐
AI人工智能+电脑小能手15 分钟前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
juniperhan29 分钟前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_1800790547331 分钟前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路1 小时前
C++23概述
java·c++·c++23
时空系1 小时前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
专注API从业者2 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
CHANG_THE_WORLD2 小时前
python 批量终止进程exe
开发语言·python
摇滚侠2 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
古城小栈2 小时前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
keep one's resolveY2 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端