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

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

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

背景

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

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

模式实现

1.定义游戏状态类css28资讯网——每日最新资讯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.定义游戏存档类css28资讯网——每日最新资讯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.定义游戏存档管理接口css28资讯网——每日最新资讯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.实现游戏存档管理接口css28资讯网——每日最新资讯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.测试css28资讯网——每日最新资讯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);    }}

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

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

回顾

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

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

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

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

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

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

标签:
  • 热门焦点
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
Top