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 运行结果:



设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录相关推荐

  1. python创建方法draw_【python设计模式-创建型】工厂方法模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  2. 设计模式-创建型-工厂-简单工厂模式

    一.姑且用一个这样的图表示一下:  二.简单工厂的基本简介:百度释义:又叫静态工厂方法,不属于那23种设计模式之一. 动态决定哪个类被实例化,不必事先知道哪个类要被实例化! 三.举例:QQ里面常用发表 ...

  3. 设计模式行为型-状态模式

    最近学习了设计模式行为型中的状态模式,这个模式的就完全体现出"多态"这种性质了,首先是它的解释:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 为什么说状 ...

  4. c++ 设计模式_设计模式行为型:观察者模式(ObserverPattern)

    定义对象之间的一种一对多依赖关系,使得每一个对象发生状态的变化时,其相关依赖对象皆得到通知并被自动更新,又称为发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模 ...

  5. 设计模式 行为型模式 -- 备忘录模式 具体实例:游戏挑战BOSS

    01:设计模式 行为型模式 – 备忘录模式(定义.结构.优缺点 适用场景分析) 02:设计模式 行为型模式 – 备忘录模式 具体实例:游戏挑战BOSS 03:设计模式 行为型模式 实例 – 备忘录模式 ...

  6. php设计一个盒子类代码_PHP设计模式之备忘录模式(Memento)代码实例大全(25)...

    目的[1] 它提供了在不破坏封装(对象不需要具有返回当前状态的函数)的情况下恢复到之前状态(使用回滚)或者获取对象的内部状态. 备忘录模式使用 3 个类来实现:Originator,Caretaker ...

  7. Net设计模式实例之备忘录模式(Memento Pattern)

    一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...

  8. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  9. 设计模式(三)结构型模式介绍及实例

    文章目录 一.适配器模式 1.1 适配器模式定义 1.2 适配器模式主要角色 1.3 适配器模式特点 1.4 适配器模式实现方式 1.4.1 类适配器模式 1.4.2 对象适配器模式 1.5 适配器模 ...

最新文章

  1. FastDFS安装与使用
  2. 【JavaScript框架封装】JavaScript中的文本字符串的转义和反转义的实现
  3. POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]
  4. BZOJ-2049 [SDOI2008]洞穴勘测
  5. 2亿QQ用户大调度背后的架构设计和高效运营(上)
  6. OpenCASCADE绘制测试线束:数据交换命令之XDE 形状命令
  7. LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
  8. 历时两年,微软物联网安全服务 Azure Sphere 全面上线!
  9. STELLA—系统动力学仿真软件 System Dynamics仿真
  10. 你知道ISO27000信息安全管理标准族有多少?
  11. 弘辽科技:惊!原来吸引淘宝买家眼球的标题是这么写出来的!
  12. Python对象的浅拷贝与深拷贝
  13. 32位操作系统升级为64位步奏
  14. openssl1.0.1 完美 升级到 1.0.1g脚本
  15. 解析:百度算法之细雨算法2.0
  16. 【Neo4j】第 10 章:图嵌入 - 从图到矩阵
  17. MS11-030-DNS 解析漏洞复现
  18. [推荐系统读书笔记]利用用户标签数据
  19. 手机电池为什么会爆炸
  20. 总结shareSDK分享到各平台需注意

热门文章

  1. 最简单的U盘安装windows 7的方法
  2. DZ先生国标资源整合之国标精选——一书在手
  3. Intensity-SLAM: Intensity Assisted Localization and Mapping for Large Scale Environment
  4. 计算机培训机构内部分工,电教人员分工及岗位职责
  5. 如何将Oracle中同一列的多行记录拼接成一个字符串
  6. python直线缺陷检测_玻璃瓶口的缺陷检测
  7. jcrop java_tapmodo-Jcrop - WEB源码|JSP源码/Java|源代码 - 源码中国
  8. C语言调用Go生成的动态库中的函数
  9. python写彩票预测软件_初学python-练习_2使用python编写彩票软件
  10. 手把手教你Python爬取女神套图