用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式

1、模式标准

模式名称:备忘录模式

模式分类:行为型

模式意图:在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态

结构图:

 适用于:

1、必须保存一个对象在某一个时刻的(部分) 状态,这样以后需要时它才能恢复到先前的状态。
2、如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

2、分析与设计

假设通过保存备份按钮对当前的游戏进行备份,如果后面失败了,通过读取备份,从刚才备份的位置重新开始。

意图:在不破坏封装性的前提下捕获一个对象(GameModel)的内部状态,并在对象(GameModel)之外保存这个状态。这样以后就可以将对象(GameModel)恢复到原先保存的状态

3、开始打造

GameModel内的使用

    // 保存到备忘录
    saveStateToMemento() {
        let memento = gameInstance.gameMementoManager.createMemento()
        memento.setState(this.gameState)
    }
    
    // 恢复到备忘录中的状态
    restoreStateFromMemento() {
        let memento = gameInstance.gameMementoManager.getLastMemento()
        this.gameState = memento.getState()
    }

 GameMemento游戏备忘录


// 备忘录类 Memento,它表示游戏的历史状态
export class GameMemento {
    private state: any;

    setState(val: any) {
        this.state = val
    }

    getState(): any {
        return this.state;
    }
}

  备忘录管理

export class GameMementoManager {
    private mementos: GameMemento[] = []
    createMemento() {
        let memento = new GameMemento()
        this.mementos.push(memento)
        return memento
    }
    getLastMemento() {
        return this.mementos[this.mementos.length - 1]
    }
    getMementoByIndex(index: number) {
        return this.mementos[index]
    }
}

 4、开始使用

// 点击保存备忘录   
DemoGameModelSystem.saveStateToMemento() // 保存状态
  
// 点击恢复到原始状态 
restoreMemento() {
   console.log('restoreMemento')
   DemoGameModelSystem.restoreStateFromMemento()
}

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 16:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 16:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 16:36:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 16:36:03       20 阅读

热门阅读

  1. 01矩阵(课程F)

    2023-12-18 16:36:03       42 阅读
  2. 9月8日星期五,今日早报简报微语报早读

    2023-12-18 16:36:03       41 阅读
  3. Golang中方法定义及使用

    2023-12-18 16:36:03       38 阅读
  4. 算法leetcode|93. 复原 IP 地址(多语言实现)

    2023-12-18 16:36:03       49 阅读
  5. SpringSecurity源码学习七:OAuth 2.0登录

    2023-12-18 16:36:03       34 阅读
  6. Unity 关于刚体模拟爆炸效果使用的方法

    2023-12-18 16:36:03       41 阅读
  7. Vue Camera组件的使用方法

    2023-12-18 16:36:03       42 阅读
  8. mingw(Qt) 利用pybind11生成python库

    2023-12-18 16:36:03       39 阅读