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;
}