当前位置 : 主页 > 编程语言 > c语言 >

C++设计模式之备忘录模式

来源:互联网 收集:自由互联 发布时间:2023-08-28
什么是备忘录模式? 备忘录模式 (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类的构造函数重新启动游戏,从保存的状态开始。

技术总结

备忘录模式,简单来说,是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。比如,当需要保存一个对象的当前状态以便后续可以恢复时,可以使用备忘录模式。例如,撤销操作、恢复操作、保存游戏进度等。 或者当需要实现一个可回滚的事务操作时,备忘录模式也非常有用。

上一篇:判断子序列
下一篇:没有了
网友评论