#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Memo
{
public:
string state;
Memo(string state)
{
this->state=state;
}
};
class Originator
{
public:
string state;
void setMemo(Memo *memo)
{
state=memo->state;
}
Memo *createMemo()
{
return new Memo(state);
}
void show()
{
cout<<state<<endl;
}
};
class Caretaker
{
public:
vector<Memo *> memo;
void save(Memo *memo)
{
(this->memo).push_back(memo);
}
Memo *getState(int i)
{
return memo[i];
}
};
int main()
{
Originator *og=new Originator();
Caretaker *ct=new Caretaker();
og->state="on";
og->show();
ct->save(og->createMemo());
og->state="off";
og->show();
ct->save(og->createMemo());
og->state="middle";
og->show();
ct->save(og->createMemo());
og->setMemo( ct->getState(2) );
og->show();
return 0;
}
GOOD:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。
适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众 多属性中的一小部分时 Originator 可以根据保存的 Memo 还原到前一状态。