Memento模式,也称为备忘录模式,作用是保存对象的状态,并在需要的时候恢复对象的状态。
这个模式相对比较简单,它有一个Originator(原生者),就是需要被保存状态以便恢复的那个对象;
一个Memento对象,这个对象主要是保存原生者的状态,并在适当的时间恢复到原生者里去。而这个适当的时间就是
由CareTaker(管理者)来决定的。
在现实中的应用最常见的就是实现系统的Undo操作了。
下面看一个简单的例子就可以明白了:
// Memento.cpp
#include
<
string
>
#include < iostream >
using namespace std;
class Originator;
class Memento
... {
public:
string GetState()
...{
return m_state;
}
void SetState(string &s)
...{
m_state = s;
}
private:
string m_state;
} ;
class Originator
... {
public:
Memento* CreateMemento()
...{
Memento *m = new Memento();
m->SetState(m_state);
return m;
}
void SetMemento(Memento *m)
...{
m_state = m->GetState();
}
void SetState(string &s)
...{
m_state = s;
}
string GetState()
...{
return m_state;
}
private:
string m_state;
} ;
// 这里的main就充当管理者
void main()
... {
Originator o;
o.SetState(string("状态1"));
cout << "原生者的初始状态:" << o.GetState() << endl;
// 取得状态
Memento *pm;
pm = o.CreateMemento();
o.SetState(string("状态2"));
cout << "原生者的现在状态:" << o.GetState() << endl;
// 恢复状态1
o.SetMemento(pm);
cout << "恢复状态后:" << o.GetState() << endl;
delete pm;
pm = NULL;
}
#include < iostream >
using namespace std;
class Originator;
class Memento
... {
public:
string GetState()
...{
return m_state;
}
void SetState(string &s)
...{
m_state = s;
}
private:
string m_state;
} ;
class Originator
... {
public:
Memento* CreateMemento()
...{
Memento *m = new Memento();
m->SetState(m_state);
return m;
}
void SetMemento(Memento *m)
...{
m_state = m->GetState();
}
void SetState(string &s)
...{
m_state = s;
}
string GetState()
...{
return m_state;
}
private:
string m_state;
} ;
// 这里的main就充当管理者
void main()
... {
Originator o;
o.SetState(string("状态1"));
cout << "原生者的初始状态:" << o.GetState() << endl;
// 取得状态
Memento *pm;
pm = o.CreateMemento();
o.SetState(string("状态2"));
cout << "原生者的现在状态:" << o.GetState() << endl;
// 恢复状态1
o.SetMemento(pm);
cout << "恢复状态后:" << o.GetState() << endl;
delete pm;
pm = NULL;
}