#include <iostream>
#include <string>
using namespace std;
class memento;
class originator
{
public:
typedef string state;
originator():_me(NULL){ _me = create_memento(); }
originator(const state &st):_st(st),_me(NULL){ _me = create_memento(); }
~originator(){ if (_me != NULL) delete _me; }
void restore_from_memento();
state get_state()
{
return _st;
}
void set_state(const state &st);
void print_state()
{
cout << _st << endl;
}
private:
memento *create_memento();
state _st;
memento *_me;
};
class memento
{
private:
friend class originator;
typedef string state;
memento(){}
memento(const state &st):_st(st){}
~memento(){}
void set_state(const state &st)
{
_st = st;
}
state get_state()
{
return _st;
}
state _st;
};
memento *originator::create_memento()
{
return new memento(_st);
}
void originator::restore_from_memento()
{
this->_st = _me->get_state();
}
void originator::set_state(const state &st)
{
_me->set_state(_st);
_st = st;
}
int main()
{
originator *o = new originator;
o->set_state("old");
o->print_state();
o->set_state("new");
o->print_state();
o->restore_from_memento();
o->print_state();
delete o;
return 0;
}
memento 备忘录模式
最新推荐文章于 2024-05-03 10:50:45 发布