日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

【設計模式】通過游戲存檔了解備忘錄模式

來源: 責編: 時間:2023-10-08 07:06:13 300觀看
導讀背景你(Caretaker)在玩一個游戲,可以對游戲進行存檔(Memento),以便后面遇到不符合預期的游戲場景,通過存檔管理(Originator)恢復。模式定義Without violating encapsulation,capture and externalize an object's internal stat

背景

你(Caretaker)在玩一個游戲,可以對游戲進行存檔(Memento),以便后面遇到不符合預期的游戲場景,通過存檔管理(Originator)恢復。t6v28資訊網——每日最新資訊28at.com

t6v28資訊網——每日最新資訊28at.com

模式實現

1.定義游戲狀態類t6v28資訊網——每日最新資訊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.定義游戲存檔類t6v28資訊網——每日最新資訊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.定義游戲存檔管理接口t6v28資訊網——每日最新資訊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.實現游戲存檔管理接口t6v28資訊網——每日最新資訊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.測試t6v28資訊網——每日最新資訊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);    }}

可以看到,游戲是可以正常會退到存檔的內容的t6v28資訊網——每日最新資訊28at.com

t6v28資訊網——每日最新資訊28at.com

回顧

本文通過游戲的存檔、回退存檔,抽象出與符合的設計模式——備忘錄模式。同時,與傳統Java的說教不同,本次的實現基于企業開發必用的Spring框架,貼近實際開發場景。t6v28資訊網——每日最新資訊28at.com

不過備忘錄模式在實際開發中的應用并不多,很少有數據存儲在服務器容器運行的內存中,而是會將數據存儲到專門的數據庫中,如磁盤型數據庫MySQL,內存型數據庫Redis等。t6v28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12374-0.html【設計模式】通過游戲存檔了解備忘錄模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 【設計模式】通過蘋果的隔空投送了解中介者模式

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

標簽:
  • 熱門焦點
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 10天營收超1億美元,《星鐵》比《原神》差在哪?

    來源:伯虎財經作者:陳平安即便你沒玩過《原神》,你一定聽說過的它的大名。恨它的人把《原神》開服那天稱作是中國游戲史上最黑暗的一天,有粉絲因為索尼在PS平臺上線《原神》,怒而
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就&ldquo;胡錫進炒股是否知道認真報道&rdquo;展開討論。有
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 華為舉行春季智慧辦公新品發布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發布會,在海外市場推出之前已經在中國市場上市的筆記本、平板、激光打印機等辦公產品,并首次推出搭載
Top 主站蜘蛛池模板: 房山区| 黄陵县| 环江| 定边县| 聊城市| 松滋市| 岑巩县| 平罗县| 黑水县| 汕头市| 商河县| 砚山县| 嘉黎县| 鄂伦春自治旗| 麻城市| 辛集市| 上思县| 哈密市| 丁青县| 绥棱县| 三台县| 察隅县| 贵港市| 巢湖市| 鄂伦春自治旗| 义乌市| 安国市| 株洲县| 绥化市| 石屏县| 静宁县| 台湾省| 陆川县| 临沂市| 贺兰县| 邵阳县| 哈巴河县| 北安市| 扎囊县| 梅州市| 措勤县|