写点什么

设计模式的艺术 第二十一章备忘录设计模式练习(设计一款 RPG 网游,为了给玩家提供更多方便,在游戏过程中可以设置一个恢复点,用于保存当前的游戏场景。如果在后续游戏过程中玩家角色“不幸牺牲”,可以返回到先前保存的场景,从所设恢复点开始重新游戏)

作者:代廉洁
  • 2022 年 9 月 02 日
    浙江
  • 本文字数:1508 字

    阅读完需:约 5 分钟

Sunny 软件公司正在开发一款 RPG 网游。为了给玩家提供更多方便,在游戏过程中可以设置一个恢复点,用于保存当前的游戏场景。如果在后续游戏过程中玩家角色“不幸牺牲”,可以返回到先前保存的场景,从所设恢复点开始重新游戏。试使用备忘录模式设计该功能。


一、类结构图



原发器类:设计为名称为 PlayScene 的具体类,面向具体备忘录类编程,包含具体方法 setName(String name)、具体方法 setLevel(Integer level)、具体方法 save()、具体方法 restore(SceneMemento sceneMemento)、具体方法 display();

备忘录类:设计为名称为 SceneMemento 的具体类,包含具体方法 setName(String name)、具体方法 setLevel(Integer level);

负责人类:设计为名称为 MementoCaretaker 的具体类,持久一个具体备忘录类的引用,包含具体方法 setMemento(SceneMemento sceneMemento)、具体方法 getMemento()。

二、典型实现代码

具体场景类:具体原发器类
// 具体场景类:具体原发器类public class Scene {    private String name;    private Integer level;
public Scene(String name, Integer level) { this.name = name; this.level = level; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getLevel() { return level; }
public void setLevel(Integer level) { this.level = level; }
public void display() { System.out.println("位置为:" + this.name + ", 等级为:" + this.level); }
public SceneMemento save() { return new SceneMemento(this.name, this.level); }
public void restore(SceneMemento sceneMemento) { this.name = sceneMemento.getName(); this.level = sceneMemento.getLevel(); }}
复制代码


具体场景备忘录类:具体备忘录类
// 具体场景备忘录类:具体备忘录类public class SceneMemento {    private String name;    private Integer level;
public SceneMemento(String name, Integer level) { this.name = name; this.level = level; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getLevel() { return level; }
public void setLevel(Integer level) { this.level = level; }}
复制代码


具体场景备忘录负责人类:具体负责人类
// 具体场景备忘录负责人类:具体负责人类public class MementoCaretaker {    private SceneMemento memento;
public SceneMemento getMemento() { return memento; }
public void setMemento(SceneMemento memento) { this.memento = memento; }}
复制代码


客户端代码:
public class Client {    public static void main(String[] args) {        Scene scene;        MementoCaretaker mementoCaretaker;        scene = new Scene("场景一", 5);        mementoCaretaker = new MementoCaretaker();
scene.display(); mementoCaretaker.setMemento(scene.save()); scene.setName("场景二"); scene.setLevel(6); scene.display(); scene.restore(mementoCaretaker.getMemento()); scene.display(); }}
复制代码


编译并运行程序,输出如下结果:
位置为:场景一, 等级为:5位置为:场景二, 等级为:6位置为:场景一, 等级为:5
复制代码


发布于: 刚刚阅读数: 6
用户头像

代廉洁

关注

还未添加个人签名 2019.10.15 加入

还未添加个人简介

评论

发布
暂无评论
设计模式的艺术 第二十一章备忘录设计模式练习(设计一款RPG网游,为了给玩家提供更多方便,在游戏过程中可以设置一个恢复点,用于保存当前的游戏场景。如果在后续游戏过程中玩家角色“不幸牺牲”,可以返回到先前保存的场景,从所设恢复点开始重新游戏)_设计模式的艺术_代廉洁_InfoQ写作社区