备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式。
定义(源于GoF《设计模式》):在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
代码
#include <iostream>
#include <vector>
using namespace std;
class Memento{ //备忘录
public:
Memento(int n):stateVal(n){}
int stateVal;
};
class Game{ //游戏
public:
Game():state(10){}
Memento saveGame(){ //保存游戏状态
Memento m(state);
return m;
}
void LoadMemento(Memento m){//加载游戏状态,并显示当前状态
state = m.stateVal;
cout<<state<<endl;
}
void play(){ state++;cout<<state<<endl; }
private:
int state;
};
class Caretake{ //进度管理者
public:
void save(Memento m){vec.push_back(m);}
Memento getMeme(int i){return vec[i];}
private:
vector<Memento> vec;
};
使用
int main(){
Caretake care;
Game game;
game.play();
care.save(game.saveGame());
game.play();
game.LoadMemento(care.getMeme(0));
return 1;
}
结果
11
12
11