AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

背景

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

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

模式實現

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

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

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

回顧

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

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

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

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

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

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

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

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 品牌洞察丨服務本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現&ldquo;美團直播&rdquo;的固定入口。在直播聚合頁面,外賣&ldquo;神槍手&rdquo;直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 三星折疊屏手機去年銷售近1000萬臺 今年目標定為1500萬

    7月29日消息,三星率先發力可折疊手機市場,在全球市場已經取得了非常亮眼的成績,接下來會進一步鞏固和擴大這一優勢。三星在推出Galaxy Z Flip5和Galax
  • 三星Galaxy Z Fold5今日亮相:厚度縮減但仍略顯厚重

    據官方此前宣布,三星將于7月26日也就是今天在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 三星Galaxy Z Fold/Flip 5國行售價曝光 :最低7499元/12999元起

    據官方此前宣布,三星將于7月26日也就是明天在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
Top