14.设计模式-备忘录模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

需求

游戏的某个场景,一游戏角色有生命力、攻击力、防御力等等数据,在打Boss前和后一定会不一样的,我们允许玩家如果感觉与Boss决斗的效果不理想可以让游戏恢复到决斗前。

代码

业务类

#include<stdio.h>#include<stdlib.h>typedefstructRoleStateMemo{intvit;intatk;intdef;}RoleStateMemo;RoleStateMemo*InitRoleStateMemo(intvit,intatk,intdef){RoleStateMemo*obj=(RoleStateMemo*)malloc(sizeof(RoleStateMemo));obj->atk=atk;obj->vit=vit;obj->def=def;returnobj;}typedefstructPlayRole{intvit;intatk;intdef;// 金币intgold;RoleStateMemo*(*saveState)(structPlayRole*);void(*recoveryState)(structPlayRole*,RoleStateMemo*);void(*stateDisplay)(structPlayRole*);void(*fight)(structPlayRole*);}PlayRole;RoleStateMemo*SaveState(PlayRole*obj){RoleStateMemo*res=InitRoleStateMemo(obj->vit,obj->atk,obj->def);returnres;}voidRecoveryState(PlayRole*obj,RoleStateMemo*memo){obj->vit=memo->vit;obj->atk=memo->atk;obj->def=memo->def;return;}voidStateDisplay(PlayRole*obj){printf("角色状态信息:\n");printf("生命值:%d\n",obj->vit);printf("攻击力:%d\n",obj->atk);printf("防御力:%d\n",obj->def);printf("金币:%d\n",obj->gold);printf("======end======\n");}voidFight(PlayRole*obj){obj->vit=(obj->vit)/2;obj->def=(obj->def)/2;obj->gold+=100;}PlayRole*InitPlayRole(){PlayRole*obj=(PlayRole*)malloc(sizeof(PlayRole));obj->vit=100;obj->atk=10;obj->def=10;obj->gold=0;obj->saveState=SaveState;obj->recoveryState=RecoveryState;obj->stateDisplay=StateDisplay;obj->fight=Fight;returnobj;}typedefstructRoleStateManager{RoleStateMemo*memo;}RoleStateManager;

客户端

intmain(){// 大战BOSS前PlayRole*lixiaoyao=InitPlayRole();lixiaoyao->stateDisplay(lixiaoyao);// 保存进度RoleStateManager stateManager;stateManager.memo=lixiaoyao->saveState(lixiaoyao);// 大战lixiaoyao->fight(lixiaoyao);lixiaoyao->stateDisplay(lixiaoyao);// 恢复之前进度lixiaoyao->recoveryState(lixiaoyao,stateManager.memo);lixiaoyao->stateDisplay(lixiaoyao);return0;}

客户端打印:

角色状态信息: 生命值:100 攻击力:10 防御力:10 金币:0 ======end====== 角色状态信息: 生命值:50 攻击力:10 防御力:5 金币:100 ======end====== 角色状态信息: 生命值:100 攻击力:10 防御力:10 金币:100 ======end======

UML图

Originator(发起人,此处是PlayRole):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。

Memento(备忘录, 此处是RoleStateMemo):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问返回到先前状态所需的所有数据。

Caretaker(管理者,此处是RoleStateManager):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。

总结

  • 备忘录模式使用场景?
    “Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1145568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15.设计模式-组合模式

组合模式&#xff1a;将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式的两种实现&#xff1a; 透明方式&#xff1a;在Component中声明所有用来管理子对象的方法&#xff0c;其中包括Add、Remove等。这样…

Nodejs+vue大学生二手闲置物品置换交易管理系统

文章目录摘要--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 该系统基于Node.js与Vue.js构建&#xff0c;旨在为大学生提供一个高效、安全的二手闲置物品交易平台。通过前后端分离架构&#xff0c;系统实现了…

2026年10款最佳降AI率工具推荐:论文AIGC检测轻松过关

2026年10款最佳降AI率工具推荐&#xff1a;论文AIGC检测轻松过关面对知网、维普、万方等平台日益严格的AIGC检测&#xff0c;选对降AI工具是关键。本文实测对比10款主流工具&#xff0c;帮你找到最适合的解决方案。为什么需要降AI率工具&#xff1f; 2026年&#xff0c;各高校普…

Nodejs+vue大学生兼职应聘评分管理系统h4bmt

文章目录系统概述核心功能模块技术实现亮点应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 Node.jsVue大学生兼职应聘评分管理系统&#xff08;H4BMT&#xff09;是一款基于前后端分离架构的Web应…

Nodejs+vue大学生兼职招聘评价系统_b8t93

文章目录系统概述核心功能模块技术实现亮点应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 Node.js与Vue.js结合的大学生兼职招聘评价系统旨在为高校学生和用人单位提供高效的兼职信息对接与信用…

2025年山东大学计算机考研复试机试真题(解题思路 + AC 代码)

2025年山东大学计算机考研复试机试真题 2025年山东大学计算机考研复试上机真题 历年山东大学计算机考研复试上机真题 历年山东大学计算机考研复试机试真题 更多学校完整题目开源地址&#xff1a;https://gitcode.com/u014339447/pgcode 百度一下pgcode 即可查看&#xff0…

导师不会告诉你的6个免费AI论文工具:1小时搞定全文告别熬夜

想知道为什么你隔壁实验室的同学总能提前交稿&#xff0c;而你还在一字一句地苦熬&#xff1f;因为他们在用一些“不该知道”的秘密武器。今天&#xff0c;我就来为你揭秘这些藏在水面之下的“学术黑科技”&#xff0c;特别是那个能让论文效率提升10倍的终极神器。 前言&#x…

输入聚食的人数,预算和口味偏好,自动推荐附近的餐厅,还能生成聚餐菜单。

智能聚餐规划系统1. 项目概述实际应用场景在朋友、同事或家庭聚会时&#xff0c;组织一次成功的聚餐需要考虑多个因素&#xff1a;人数、预算、不同人的口味偏好、餐厅选择、菜品搭配等。传统方式需要人工查询、比较、协调&#xff0c;过程繁琐且容易遗漏重要信息。痛点分析- 信…

2025年同济大学计算机考研复试机试真题(解题思路 + AC 代码)

2025年同济大学计算机考研复试机试真题 2025年同济大学计算机考研复试上机真题 历年同济大学计算机考研复试上机真题 历年同济大学计算机考研复试机试真题 更多学校完整题目开源地址&#xff1a;https://gitcode.com/u014339447/pgcode 百度一下pgcode 即可查看&#xff0…

matlab实时脚本算拉普拉斯反变换和画图

//////////////////////clcclose allclearsyms s tnum 80;den s^412*s^341*s^282*s80;Fs num/denres solve(den) %求解分母多项式等于 0 的根&#xff08;即特征根&#xff09;Ft simplify(ilaplace(Fs, s, t)) % %对 F(s)做拉普拉斯逆变换&#xff0c;将变量从拉普拉斯域…

(8-1)自动驾驶中的无地图环境路径探索:D* Lite算法简介

在自动驾驶领域&#xff0c;无地图环境下的路径探索是极具挑战性的课题。本章聚焦于 D* Lite 算法&#xff0c;这是一种在未知或部分已知环境中进行高效路径规划的先进算法。我们将从 D* Lite 算法的应用领域、核心思想、实现步骤入手&#xff0c;通过实战案例深入剖析其在迷宫…

Unity AI Navigation 从 0 到 1:一篇吃透新 NavMesh 系统的实战

一、为什么你必须升级到老 NavMesh&#xff1f; 如果你还在用 2021 LTS 之前的 Navigation 窗口做 Bake&#xff0c;那你一定踩过这些坑&#xff1a; 场景里一移动箱子&#xff0c;就要重烤 NavMesh&#xff0c;CPU 直接爆炸&#xff1b; 不同体型的 NPC 必须共用同一张 Mesh…

电-气-热综合能源系统耦合优化调度Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

(8-2-01)自动驾驶中的无地图环境路径探索:基于Pygame的交互式路径规划器(1)

8.2 实战案例&#xff1a;基于Pygame的交互式路径规划器本项目是一个基于 Pygame 的交互式路径规划器&#xff0c;通过 A* 和 D* Lite 算法实现路径规划。用户可以在 GUI 界面中设置起点、终点和障碍物&#xff0c;并观察路径规划的过程和结果&#xff0c;以及实时更新的路径信…

Unity3D AI Navigation 详解:从基础概念到实战应用

引言在 Unity 游戏开发中&#xff0c;实现智能的 AI 角色移动是提升游戏体验的关键。Unity 提供的 AI Navigation 系统&#xff0c;能够帮助开发者轻松创建能够自主寻路、规避障碍、跨越特殊地形的角色。无论你是初学者还是有经验的开发者&#xff0c;掌握这套系统都能让你在游…

计及多能耦合的区域综合能源系统电气热能流计算Matlab实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

Unity 的AI Navigation 系统详细总结

Unity 的AI Navigation 系统&#xff08;2022.2 及以上版本通过 AI Navigation 包实现&#xff09;可让角色在游戏世界智能导航&#xff0c;核心基于自动生成的导航网格&#xff08;NavMesh&#xff09; &#xff0c;支持动态障碍物实时调整导航、OffMesh Link实现跳跃 / 开门等…

Unity3D AI Navigation 完全指南:从基础到实战,让角色智能导航

在 Unity 开发中&#xff0c;让游戏角色自主避开障碍、找到最优路径&#xff0c;是提升玩法体验的关键。Unity 的 AI Navigation 系统&#xff08;2022.2 版本已整合为 AI Navigation 包&#xff09;通过导航网格&#xff08;NavMesh&#xff09;、智能 Agent 和动态障碍物机制…

Unity3D AI导航系统完全指南:从核心概念到动画耦合

在游戏开发中&#xff0c;让角色智能地在场景中移动是提升沉浸感的关键。Unity的AI Navigation包通过导航网格&#xff08;NavMesh&#xff09;和寻路系统&#xff0c;让开发者轻松实现角色的自主导航。本文将基于官方文档&#xff0c;带你全面了解AI导航的核心概念、新功能、实…

RabbitMQ在大数据风控系统中的应用案例

RabbitMQ在大数据风控系统中的应用案例 关键词:RabbitMQ、大数据风控、消息队列、实时计算、分布式系统 摘要:在金融科技(FinTech)领域,大数据风控系统如同"数字安全卫士",需要724小时实时监控用户行为、交易数据,快速识别欺诈风险。本文将以"快递中转站…