成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
本文通過游戲的存檔、回退存檔,抽象出與符合的設計模式——備忘錄模式。同時,與傳統Java的說教不同,本次的實現基于企業開發必用的Spring框架,貼近實際開發場景。

背景

你(Caretaker)在玩一個游戲,可以對游戲進行存檔(Memento),以便后面遇到不符合預期的游戲場景,通過存檔管理(Originator)恢復。

模式定義

Without violating encapsulation,capture and externalize an object's internal state so that the object can be restored to this state later.

在不違反封裝的情況下,捕獲并外部化對象的內部狀態,以便以后可以將對象恢復到該狀態。

模式結構

模式實現

1.定義游戲狀態類

package com.example.designpattern.memento.domain;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 游戲狀態
 *
 * @author hongcunlin
 */
@Data
@AllArgsConstructor
public 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.定義游戲存檔類

package com.example.designpattern.memento.domain;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 游戲存檔
 *
 * @author hongcunlin
 */
@Data
@AllArgsConstructor
public class GameMemento {
    /**
     * 經驗值
     */
    private int exp;

    /**
     * 等級
     */
    private int level;
}

3.定義游戲存檔管理接口

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.實現游戲存檔管理接口

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.測試

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
 */
@SpringBootTest
public 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);
    }
}

可以看到,游戲是可以正常會退到存檔的內容的

回顧

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

不過備忘錄模式在實際開發中的應用并不多,很少有數據存儲在服務器容器運行的內存中,而是會將數據存儲到專門的數據庫中,如磁盤型數據庫MySQL,內存型數據庫Redis等。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-11-02 10:41:33

備忘錄模式

2024-05-15 17:41:37

備忘錄模式多線程

2023-10-31 09:07:16

備忘錄模式保存

2023-04-19 08:03:52

Go設計模式

2025-02-17 14:48:14

2018-12-24 21:40:12

2017-03-21 11:02:59

基礎深度學習備忘錄

2011-08-16 18:38:23

Core Animat動畫

2011-04-11 10:03:32

錢伯斯思科

2014-04-17 10:30:41

Linux 命令黑白備忘錄

2023-10-10 15:26:30

內存泄露OOM

2023-09-26 00:27:07

設計模式鏈接

2016-03-03 10:09:26

2018-06-20 13:14:16

MySQL數據優化查詢備忘錄

2013-08-29 10:50:48

移動網站性能優化移動web

2021-03-08 00:12:44

Grid 備忘錄 函數

2011-12-07 09:19:49

JavaJ2MEBicaVM

2023-10-07 00:17:06

AirDrop中介者模式

2011-05-20 09:12:48

AMD北京云基地云計算

2019-04-30 11:15:51

正則表達式JS前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美中文字幕一区 | 国产精品亚洲成在人线 | 欧美日韩电影一区二区 | 成年免费大片黄在线观看岛国 | 色婷婷综合在线观看 | 国产精品美女久久久久久久久久久 | 做a视频 | 国产精品日韩在线 | 96av麻豆蜜桃一区二区 | 久久一区精品 | 日韩中文字幕一区二区 | 成人片网址 | 国产日韩一区二区三免费 | 久久夜视频 | 四虎av电影 | 人人爽人人爽 | 日韩欧美国产一区二区三区 | 一级片av | 亚洲国产成人精品女人久久久野战 | 国产视频精品在线 | 啪啪网页 | 久久中文字幕av | 宅男噜噜噜66一区二区 | 91欧美精品成人综合在线观看 | 亚洲免费观看 | 在线观看成人小视频 | 欧洲一级黄 | 国产精品久久久久久网站 | 国产精品黄 | 9999视频| 91精品国产综合久久久动漫日韩 | 伊人久久综合影院 | 中文字幕福利视频 | 精品中文字幕在线观看 | 日韩国产欧美一区 | 成人精品免费视频 | 久久精品色欧美aⅴ一区二区 | aaaa一级毛片| 日韩欧美高清 | 日韩 欧美 综合 | 奇米久久久 |