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

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

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

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

背景

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

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

模式實現

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

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

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

回顧

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 網傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網友@長三角行健者爆料稱,據經銷商集團反饋,小米汽車目前已經開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 静宁县| 同心县| 保山市| 丹凤县| 镶黄旗| 花莲市| 诸城市| 东阿县| 白水县| 托克逊县| 江门市| 竹山县| 广灵县| 海丰县| 常州市| 谢通门县| 双桥区| 左权县| 马尔康县| 大洼县| 周口市| 泾川县| 基隆市| 深州市| 平阳县| 济阳县| 淄博市| 长春市| 英超| 屏边| 龙海市| 襄城县| 米林县| 柳州市| 临猗县| 东台市| 北安市| 桓台县| 德安县| 葫芦岛市| 临夏市|