一. 备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
结构图:
使用范围:
Memento 模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator 可以根据保存的 Memento 信息还原到前一状态。
代码:
-
-
-
class Memento
-
{
-
-
private:
-
-
-
friend class Originator;
-
-
Memento() {}
-
-
Memento(const string& sdt)
-
{
-
_sdt = sdt;
-
}
-
-
void SetState(const string& sdt)
-
{
-
_sdt = sdt;
-
}
-
-
string GetState()
-
{
-
return _sdt;
-
}
-
-
private:
-
string _sdt;
-
-
};
-
-
-
-
class Originator
-
{
-
public:
-
Originator()
-
{
-
_sdt = "";
-
_mt = 0;
-
}
-
-
Originator(const string& sdt)
-
{
-
_sdt = sdt;
-
_mt = 0;
-
}
-
-
-
Memento* CreateMemento()
-
{
-
return new Memento(_sdt);
-
}
-
-
-
void RestoreToMemento(Memento* mt)
-
{
-
this->_sdt = mt->GetState();
-
}
-
-
string GetState()
-
{
-
return _sdt;
-
}
-
-
void SetState(const string& sdt)
-
{
-
_sdt = sdt;
-
}
-
-
void PrintState()
-
{
-
cout<<this->_sdt<<"....."<<endl;
-
}
-
-
private:
-
string _sdt;
-
Memento* _mt;
-
};
-
-
-
-
int main(int argc,char* argv[])
-
{
-
Originator* o = new Originator();
-
-
o->SetState("old");
-
o->PrintState();
-
-
Memento* m = o->CreateMemento();
-
o->SetState("new");
-
o->PrintState();
-
-
o->RestoreToMemento(m);
-
o->PrintState();
-
-
return 0;
-
}
二. 说明
1. Memento 负责存储 Originator 对象的内部状态,并可防止 Originator 以外的其它对象访问备忘录(具体实现方法,就是让其所有方法都为私有的)。
2. Memento 声明 Originator 为它的友元类,这样 Originator 就可以访问它的所有函数,即对 Originator 是开放的。
C++设计模式实现--备忘录(Memento)模式,布布扣,bubuko.com
C++设计模式实现--备忘录(Memento)模式
原文:http://blog.csdn.net/l_andy/article/details/31748181