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()
}