Memento
4519 ワード
#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;
}