问题:
在状态转换过程中,可能由于某种原因需要恢复到之前的状态;这就需要们保存对象的状态;
但是应该怎么实现呢?
解决方案:
需要三个类来解决这个问题:
Originator:
“备忘发起角色”创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。
Memento:备忘录角色存储“备忘发起角色”的内部状态。
Caretaker:负责保存好备忘录。不能对备忘录的内容进行操作或检查。
#include <IOSTREAM>
#include <STRING>
using namespace std;
class Originator;
class Memento{
public:
~Memento(){}
private:
friend Originator;
Memento(){}
Memento(const string &str)
{
state=str;
}
const string & GetState()
{
return state;
}
void SetState(const string &str)
{
state=str;
}
string state;
};
class Originator{
public:
Originator(){}
Originator(const string &str){state=str;}
~Originator(){}
Memento *CreateMement()
{
return new Memento(state);
}
void RestoreMemento(Memento *mem)
{
state=mem->GetState();
}
void PrintState()
{
cout<<"当前状态:"<<state<<endl;
}
const string & GetState()
{
return state;
}
void SetState(const string &str)
{
state=str;
}
private:
string state;
};
class CareTaker{
public:
CareTaker(){memento=NULL;}
CareTaker(Memento *mem)
{
memento=mem;
}
void SetMemento(Memento *mem)
{
memento=mem;
}
Memento *GetMemento()
{
return memento;
}
~CareTaker(){
}
private:
Memento *memento;
};
void main()
{
Originator *orig=new Originator("HI");
Memento *mem=orig->CreateMement();
CareTaker *care=new CareTaker(mem);
orig->PrintState();
orig->SetState("BYE");
orig->PrintState();
orig->RestoreMemento(care->GetMemento());
delete mem;
orig->PrintState();
}