设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录
01:设计模式 行为型模式 – 备忘录模式(定义、结构、优缺点 适用场景分析)
02:设计模式 行为型模式 – 备忘录模式 具体实例:游戏挑战BOSS
03:设计模式 行为型模式 实例 – 备忘录模式实例
1. 备忘录模式实例
1.1 需求:
玩孤胆枪手游戏时,主角有“武器”,“生命值”,“技能值”,
“防护值”等属性并即时显示,游戏“有当前进度值”,
玩家在游戏时随时可以保存游戏进度及从以前进度回复,
请用备忘录模式模拟这一过程。
1.2 类图分析:
1.3 代码实现:
1.3.1 GameRole
package ex09.memorandum;/*** ClassName: GameRole* Description: 游戏角色类:发起人角色一个的属性** @author Tianjiao* @date 2021/11/22 17:04*/
public class GameRole {// “武器”private String weapon;// “生命值”private int lifeValue;// “技能值”private int skillValue;// “防护值”private int protectionValue;public GameRole(String weapon, int lifeValue, int skillValue, int protectionValue) {this.weapon = weapon;this.lifeValue = lifeValue;this.skillValue = skillValue;this.protectionValue = protectionValue;}public String getWeapon() {return weapon;}public void setWeapon(String weapon) {this.weapon = weapon;}public int getLifeValue() {return lifeValue;}public void setLifeValue(int lifeValue) {this.lifeValue = lifeValue;}public int getSkillValue() {return skillValue;}public void setSkillValue(int skillValue) {this.skillValue = skillValue;}public int getProtectionValue() {return protectionValue;}public void setProtectionValue(int protectionValue) {this.protectionValue = protectionValue;}@Overridepublic String toString() {return "[" +"weapon='" + weapon + '\'' +", lifeValue=" + lifeValue +", skillValue=" + skillValue +", protectionValue=" + protectionValue +']';}
}
1.3.2 Game:发起人角色
package ex09.memorandum;/*** ClassName: Game* Description: 游戏类:发起人角色** @author Tianjiao* @date 2021/11/22 17:15*/
public class Game {// 游戏进度private String gameProgress;// 游戏角色private GameRole gameRole;public Game(String gameProgress, GameRole gameRole) {this.gameProgress = gameProgress;this.gameRole = gameRole;}public Game saveState() {return this;}public void recoverState(Game roleStateMemento) {this.gameProgress = roleStateMemento.getGameProgress();this.gameRole.setWeapon(roleStateMemento.getGameRole().getWeapon());this.gameRole.setLifeValue(roleStateMemento.getGameRole().getLifeValue());this.gameRole.setProtectionValue(roleStateMemento.getGameRole().getProtectionValue());this.gameRole.setSkillValue(roleStateMemento.getGameRole().getSkillValue());}//恢复角色状态public String getGameProgress() {return gameProgress;}public void setGameProgress(String gameProgress) {this.gameProgress = gameProgress;}public GameRole getGameRole() {return gameRole;}public void setGameRole(GameRole gameRole) {this.gameRole = gameRole;}@Overridepublic String toString() {return "[" +"gameProgress='" + gameProgress + '\'' +", gameRole=" + gameRole.toString() +']';}
}
1.3.3 GameMemento :游戏备忘录角色
package ex09.memorandum;import java.util.HashMap;
import java.util.Map;/*** ClassName: GameMemento* Description: 游戏备忘录角色:可以记录游戏的进度和对象的游戏角色状态** @author Tianjiao* @date 2021/11/22 17:18*/
public class GameMemento {private static final Map<String, GameRole> gameVersionMap = new HashMap();public void addVersionState(String gameProgress, GameRole gameRole) {GameRole role = new GameRole(gameRole.getWeapon(), gameRole.getLifeValue(), gameRole.getSkillValue(), gameRole.getProtectionValue());gameVersionMap.put(gameProgress, role);}public void deleteVersionState(String gameProgress) {gameVersionMap.remove(gameProgress);}public GameRole getVersionState(String gameProgress) {return gameVersionMap.get(gameProgress);}public void showVersions() {if (gameVersionMap.size() != 0) {for (Map.Entry<String, GameRole> entry : gameVersionMap.entrySet()) {System.out.print("{" + entry.getKey() + " : " + entry.getValue().toString() + "}\n");}} else {System.out.println("对不起, 没有历史版本信息.");}}
}
1.3.4 GameCaretaker:管理者角色
package ex09.memorandum;/*** ClassName: GameCaretaker* Description: 管理者角色:对备忘录进行管理, 提供保存于获取备忘录的功能** @author Tianjiao* @date 2021/11/22 17:19*/
public class GameCaretaker {private final GameMemento gameMemento;public GameCaretaker(GameMemento gameMemento) {this.gameMemento = gameMemento;}public void saveGameState(Game game) {this.gameMemento.addVersionState(game.getGameProgress(), game.getGameRole());}public Game getGameState(String gameProgress) {return new Game(gameProgress, this.gameMemento.getVersionState(gameProgress));}public void deleteGameState(String gameProgress) {this.gameMemento.deleteVersionState(gameProgress);}public void showVersions() {this.gameMemento.showVersions();}
}
1.3.5 Client:客户端类
package ex09.memorandum;/*** ClassName: Client* Description: 客户端类:测试类** @author Tianjiao* @date 2021/11/22 19:51*/
public class Client {public static void main(String[] args) {// 创建游戏对象GameRole gameRole = new GameRole("废铁刀", 100, 100, 100);Game game = new Game("0.00%", gameRole);// 创建管理者对象GameCaretaker gameCaretaker = new GameCaretaker(new GameMemento());// 1. 存储初始状态gameCaretaker.saveGameState(game);// 2. 第一次改变游戏状态game.setGameProgress("27%");gameRole.setWeapon("白银刀");gameRole.setLifeValue(90);gameRole.setSkillValue(90);gameRole.setProtectionValue(90);// 3. 存储第一次改变的状态gameCaretaker.saveGameState(game);// 4. 第二次改变游戏状态game.setGameProgress("50%");gameRole.setWeapon("黄金刀");gameRole.setLifeValue(68);gameRole.setSkillValue(68);gameRole.setProtectionValue(68);// 5. 存储第二次改变的状态gameCaretaker.saveGameState(game);// 6. 第三次改变状态game.setGameProgress("63%");gameRole.setWeapon("铂金刀");gameRole.setLifeValue(56);gameRole.setSkillValue(56);gameRole.setProtectionValue(56);// 7. 存储第三次改变游戏的状态gameCaretaker.saveGameState(game);// 打印当前的游戏状态System.out.println("当前的游戏状态为:");System.out.println(game.toString() + "\n");// 打印游戏版本信息System.out.println("历代的游戏版本信息为:");gameCaretaker.showVersions();// 回到游戏进度为27%的版本game.recoverState(gameCaretaker.getGameState("27%"));// 打印当前的游戏状态System.out.println("\n当前的游戏状态为:");System.out.println(game.toString() + "\n");// 回到游戏进度为63%的版本game.recoverState(gameCaretaker.getGameState("63%"));// 打印当前的游戏状态System.out.println("当前的游戏状态为:");System.out.println(game.toString() + "\n");}
}
1.3.6 运行结果:
设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录相关推荐
- python创建方法draw_【python设计模式-创建型】工厂方法模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...
- 设计模式-创建型-工厂-简单工厂模式
一.姑且用一个这样的图表示一下: 二.简单工厂的基本简介:百度释义:又叫静态工厂方法,不属于那23种设计模式之一. 动态决定哪个类被实例化,不必事先知道哪个类要被实例化! 三.举例:QQ里面常用发表 ...
- 设计模式行为型-状态模式
最近学习了设计模式行为型中的状态模式,这个模式的就完全体现出"多态"这种性质了,首先是它的解释:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 为什么说状 ...
- c++ 设计模式_设计模式行为型:观察者模式(ObserverPattern)
定义对象之间的一种一对多依赖关系,使得每一个对象发生状态的变化时,其相关依赖对象皆得到通知并被自动更新,又称为发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模 ...
- 设计模式 行为型模式 -- 备忘录模式 具体实例:游戏挑战BOSS
01:设计模式 行为型模式 – 备忘录模式(定义.结构.优缺点 适用场景分析) 02:设计模式 行为型模式 – 备忘录模式 具体实例:游戏挑战BOSS 03:设计模式 行为型模式 实例 – 备忘录模式 ...
- php设计一个盒子类代码_PHP设计模式之备忘录模式(Memento)代码实例大全(25)...
目的[1] 它提供了在不破坏封装(对象不需要具有返回当前状态的函数)的情况下恢复到之前状态(使用回滚)或者获取对象的内部状态. 备忘录模式使用 3 个类来实现:Originator,Caretaker ...
- Net设计模式实例之备忘录模式(Memento Pattern)
一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- 设计模式(三)结构型模式介绍及实例
文章目录 一.适配器模式 1.1 适配器模式定义 1.2 适配器模式主要角色 1.3 适配器模式特点 1.4 适配器模式实现方式 1.4.1 类适配器模式 1.4.2 对象适配器模式 1.5 适配器模 ...
最新文章
- FastDFS安装与使用
- 【JavaScript框架封装】JavaScript中的文本字符串的转义和反转义的实现
- POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]
- BZOJ-2049 [SDOI2008]洞穴勘测
- 2亿QQ用户大调度背后的架构设计和高效运营(上)
- OpenCASCADE绘制测试线束:数据交换命令之XDE 形状命令
- LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
- 历时两年,微软物联网安全服务 Azure Sphere 全面上线!
- STELLA—系统动力学仿真软件 System Dynamics仿真
- 你知道ISO27000信息安全管理标准族有多少?
- 弘辽科技:惊!原来吸引淘宝买家眼球的标题是这么写出来的!
- Python对象的浅拷贝与深拷贝
- 32位操作系统升级为64位步奏
- openssl1.0.1 完美 升级到 1.0.1g脚本
- 解析:百度算法之细雨算法2.0
- 【Neo4j】第 10 章:图嵌入 - 从图到矩阵
- MS11-030-DNS 解析漏洞复现
- [推荐系统读书笔记]利用用户标签数据
- 手机电池为什么会爆炸
- 总结shareSDK分享到各平台需注意
热门文章
- 最简单的U盘安装windows 7的方法
- DZ先生国标资源整合之国标精选——一书在手
- Intensity-SLAM: Intensity Assisted Localization and Mapping for Large Scale Environment
- 计算机培训机构内部分工,电教人员分工及岗位职责
- 如何将Oracle中同一列的多行记录拼接成一个字符串
- python直线缺陷检测_玻璃瓶口的缺陷检测
- jcrop java_tapmodo-Jcrop - WEB源码|JSP源码/Java|源代码 - 源码中国
- C语言调用Go生成的动态库中的函数
- python写彩票预测软件_初学python-练习_2使用python编写彩票软件
- 手把手教你Python爬取女神套图