当前位置:首页 > 科技  > 软件

【设计模式】通过游戏存档了解备忘录模式

来源: 责编: 时间:2023-10-08 07:06:13 381观看
导读背景你(Caretaker)在玩一个游戏,可以对游戏进行存档(Memento),以便后面遇到不符合预期的游戏场景,通过存档管理(Originator)恢复。模式定义Without violating encapsulation,capture and externalize an object's internal stat

背景

你(Caretaker)在玩一个游戏,可以对游戏进行存档(Memento),以便后面遇到不符合预期的游戏场景,通过存档管理(Originator)恢复。MEh28资讯网——每日最新资讯28at.com

MEh28资讯网——每日最新资讯28at.com

模式实现

1.定义游戏状态类MEh28资讯网——每日最新资讯28at.com

package com.example.designpattern.memento.domain;import lombok.AllArgsConstructor;import lombok.Data;/** * 游戏状态 * * @author hongcunlin */@Data@AllArgsConstructorpublic class GameState {    /**     * 经验值     */    private int exp;    /**     * 等级     */    private int level;    /**     * 存档     *     * @return 存档     */    public GameMemento save() {        return new GameMemento(exp, level);    }    /**     * 加载存档     *     * @param gameMemento 存档     */    public void restore(GameMemento gameMemento) {        exp = gameMemento.getExp();        level = gameMemento.getLevel();    }}

2.定义游戏存档类MEh28资讯网——每日最新资讯28at.com

package com.example.designpattern.memento.domain;import lombok.AllArgsConstructor;import lombok.Data;/** * 游戏存档 * * @author hongcunlin */@Data@AllArgsConstructorpublic class GameMemento {    /**     * 经验值     */    private int exp;    /**     * 等级     */    private int level;}

3.定义游戏存档管理接口MEh28资讯网——每日最新资讯28at.com

package com.example.designpattern.memento.manager;import com.example.designpattern.memento.domain.GameMemento;/** * 游戏存档管理 * * @author hongcunlin */public interface GameSaveManger {    /**     * 保持存档     *     * @param memento 存档     */    void addSave(GameMemento memento);    /**     * 获取存档     *     * @param index 索引     * @return 存档     */    GameMemento getSave(int index);}

4.实现游戏存档管理接口MEh28资讯网——每日最新资讯28at.com

package com.example.designpattern.memento.manager.impl;import com.example.designpattern.memento.domain.GameMemento;import com.example.designpattern.memento.manager.GameSaveManger;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.List;/** * 游戏管理 * * @author hongcunlin */@Component("gameSaveManger")public class GameSaveMangerImpl implements GameSaveManger {    /**     * 存档列表     */    private final List<GameMemento> saves = new ArrayList<>();    /**     * 保持存档     *     * @param memento 存档     */    @Override    public void addSave(GameMemento memento) {        saves.add(memento);    }    /**     * 获取存档     *     * @param index 索引     * @return 存档     */    @Override    public GameMemento getSave(int index) {        return saves.get(index);    }}

5.测试MEh28资讯网——每日最新资讯28at.com

package com.example.designpattern.memento;import com.example.designpattern.memento.domain.GameState;import com.example.designpattern.memento.manager.GameSaveManger;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;/** * 备忘录模式测试 * * @author hongcunlin */@SpringBootTestpublic class DesignPatternTest {    /**     * 游戏存档管理     */    @Resource(name = "gameSaveManger")    private GameSaveManger gameSaveManger;    @Test    public void test() {        // 开始游戏        GameState gameState = new GameState(1, 1);        // 存档游戏        gameSaveManger.addSave(gameState.save());        // 玩游戏        gameState.setExp(2);        gameState.setLevel(2);        // 加载存档        gameState.restore(gameSaveManger.getSave(0));        System.out.println(gameState);    }}

可以看到,游戏是可以正常会退到存档的内容的MEh28资讯网——每日最新资讯28at.com

MEh28资讯网——每日最新资讯28at.com

回顾

本文通过游戏的存档、回退存档,抽象出与符合的设计模式——备忘录模式。同时,与传统Java的说教不同,本次的实现基于企业开发必用的Spring框架,贴近实际开发场景。MEh28资讯网——每日最新资讯28at.com

不过备忘录模式在实际开发中的应用并不多,很少有数据存储在服务器容器运行的内存中,而是会将数据存储到专门的数据库中,如磁盘型数据库MySQL,内存型数据库Redis等。MEh28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12374-0.html【设计模式】通过游戏存档了解备忘录模式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 【设计模式】通过苹果的隔空投送了解中介者模式

下一篇: 一套基于 .NET Core 开发的支付SDK集 - paylink

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    &copy;自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top