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

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

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

背景

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

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

模式实现

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

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

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

回顾

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

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

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

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

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

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

标签:
  • 热门焦点
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
Top