首页 > 代码库 > Memento

Memento

#include <iostream>#include <string>using namespace std;class Memento{public:    Memento(string sState) { m_sState = sState; }        string GetState() { return m_sState; }    void SetState(string sState) { m_sState = sState; }    private:    string m_sState;};class Originator{public:    Originator() : m_memento("") {}        void Executor(string sDo)    {        cout<<sDo<<endl;    }    void SetSate(const Memento& memento) { m_memento = memento; cout<<"current state:"<<m_memento.GetState()<<endl; }    Memento CurrentState()    {        return m_memento;    }private:    Memento m_memento;};class Caretaker{public:    Caretaker() : m_backupMemento("") { m_executor.SetSate(Memento("Initial state")); }        void Begin()    {        m_backupMemento = m_executor.CurrentState();        m_executor.SetSate(Memento("ready for transaction"));        m_executor.Executor("begin transaction...");    }            void Rollback()    {        m_executor.SetSate(Memento("rollback transaction"));        m_executor.Executor("rollback...");        m_executor.SetSate(m_backupMemento);    }    private:    Originator m_executor;    Memento m_backupMemento;};int main(int argc, char *argv[]){    Caretaker caretaker;    caretaker.Begin();    caretaker.Rollback();    return 0;}

 

Memento