备忘录模式(Memento Pattern):游戏存档系统实战案例分析

肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

开发一款角色扮演游戏(RPG)时,需要一个系统来保存玩家的游戏进度,包括角色的位置、状态、装备和任务进度等,以便玩家可以加载之前的存档继续游戏。

2. 为什么要使用备忘录设计模式

备忘录模式允许游戏状态的保存和恢复,使得玩家可以自由地进行游戏存档和读档操作,而不会影响当前的游戏逻辑。

3. 标准备忘录设计模式图

4. 业务备忘录设计模式图

5. 业务代码参考

java 复制代码
// 游戏角色状态
class PlayerStatus {
    // 角色状态属性
}

// 游戏项目(如武器、装备等)
class Item {
    // 项目属性
}

// 游戏状态
class GameState {
    private Vector playerPosition;
    private PlayerStatus playerStatus;
    private List<Item> equipment;
    private Map<String, Boolean> questProgress;

    // 构造函数、getter 和 setter

    public String getState() {
        // 转换游戏状态为字符串形式,用于存储
        return "状态信息";
    }
}

// 游戏类
class Game {
    private GameState currentState;

    public GameState saveGame() {
        // 保存当前游戏状态
        return new GameState(currentState); // 复制当前状态
    }

    public void loadGame(GameState gameState) {
        // 从存档中恢复游戏状态
        this.currentState = gameState;
    }
}

// 存档管理器
class SaveManager {
    private Stack<GameState> saves = new Stack<>();

    public void saveState(GameState gameState) {
        saves.push(gameState);
    }

    public GameState loadLastState() {
        return saves.isEmpty() ? null : saves.pop();
    }
}

// 客户端使用
class GameApp {
    public static void main(String[] args) {
        Game game = new Game();
        SaveManager saveManager = new SaveManager();

        // 玩家进行一系列操作后,决定保存游戏
        GameState savedState = game.saveGame();
        saveManager.saveState(savedState);

        // 玩家退出游戏或读取存档
        GameState loadedState = saveManager.loadLastState();
        if (loadedState != null) {
            game.loadGame(loadedState);
            // 游戏继续从存档状态进行
        }
    }
}

6. 使用备忘录设计模式的好处

  • 状态管理:允许游戏在不同时间点保存和恢复状态。
  • 灵活性:玩家可以随时保存和加载游戏,提高了游戏体验。

7. 其他使用备忘录设计模式场景参考

  • 图形设计软件:保存设计的不同版本。
  • 文档编辑:实现文档的版本控制。

总结

  • Git:虽然不是直接使用备忘录模式,但Git的版本控制思想与备忘录模式相似。

结论

备忘录模式为游戏存档系统提供了一种有效的方法来保存和恢复游戏状态,增强了游戏的可玩性和用户体验。

历史热点文章

相关推荐
涡能增压发动积2 天前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o2 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨2 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz2 天前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
swg3213212 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
从前慢丶2 天前
前端交互规范(Web 端)
前端
tyung2 天前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald2 天前
SpringBoot - 自动配置原理
java·spring boot·后端
CHU7290352 天前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing2 天前
Page-agent MCP结构
前端·人工智能