什么是备忘录模式? 备忘录模式 (Memento Pattern)又叫快照模式(Snapshot Pattern),备忘录模式,是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这
什么是备忘录模式?
备忘录模式 (Memento Pattern)又叫快照模式(Snapshot Pattern),备忘录模式,是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式提供了一种状态恢复机制,允许对象回到之前的状态。实现了对发起人状态的备份和恢复,而不会破坏封装性。
C++代码示例
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class GameState {
private:
vector<string> m_history;
int m_currentState;
public:
void addHistory(string move) {
m_history.push_back(move);
}
void setCurrentState(int state) {
m_currentState = state;
}
int getCurrentState() const {
return m_currentState;
}
vector<string> getHistory() const {
return m_history;
}
};
class Game {
private:
GameState* m_state;
public:
Game() {
m_state = new GameState();
}
void makeMove(string move) {
m_state->addHistory(move);
m_state->setCurrentState(getNewState(move));
}
int getNewState(string move) {
// Determine new state based on move made
return 0;
}
GameState* getState() {
return m_state;
}
};
int main() {
Game game;
game.makeMove("move1");
game.makeMove("move2");
GameState state = game.getState();
// Restart game from saved state
Game newGame = Game(state);
return 0;
}
在这个示例中,GameState
类代表游戏的状态,并包含一个历史记录以及当前状态。Game
类代表游戏本身,并使用GameState
对象来记录游戏的状态。在makeMove()
方法中,游戏移动添加到历史记录中,并更新当前状态。getNewState()
方法确定根据所做的移动新的状态。getState()
方法返回游戏的当前状态。
在主函数中,游戏进行了一系列的移动并保存了当前状态。然后,可以使用getState()
方法获取保存的状态,并使用Game
类的构造函数重新启动游戏,从保存的状态开始。
技术总结
备忘录模式,简单来说,是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。比如,当需要保存一个对象的当前状态以便后续可以恢复时,可以使用备忘录模式。例如,撤销操作、恢复操作、保存游戏进度等。 或者当需要实现一个可回滚的事务操作时,备忘录模式也非常有用。