备忘录模式(memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
模式实现:
[code]struct State{
wchar_t wcsState[260];
};
class Memento{
public:
Memento(State *pState): m_pState(pState) {}
State *GetState() { return m_pState; }
private:
friend class Originator;
State *m_pState;
};
class Originator{
public:
Originator() : m_pState(NULL) {}
~Originator(){
//Delete the storage of the state
if(m_pState){
delete m_pState;
m_pState = NULL;
}
}
void SetMemento(Memento *pMemento);
Memento * CreateMemento();
void SetValue(wchar_t *val){
memset(wcsValue, 0, 260 * sizeof(wchar_t));
wcscpy_s(wcsValue, 260, val);
}
void PrintState() { std::wcout << wcsValue << std::endl; }
private:
State *m_pState; //To store the object's state
wchar_t wcsValue[260]; //This is the object's real data
};
Memento *Originator::CreateMemento(){
m_pState = new State;
if(m_pState == NULL)
return NULL;
Memento *pMemento = new Memento(m_pState);
wcscpy_s(m_pState->wcsState, 260, wcsValue); //Backup the value
return pMemento;
}
void Originator::SetMemento(Memento *pMemento){
m_pState = pMemento->GetState();
//Recovery the data
memset(wcsValue, 0, 260 * sizeof(wchar_t));
wcscpy_s(wcsValue, 260, m_pState->wcsState);
}
//Manager the Memento
class Caretaker{
public:
Memento *GetMemento() { return m_pMemento; }
void SetMemento(Memento *pMemento){
//Free the previous Memento
if(m_pMemento){
delete m_pMemento;
m_pMemento = NULL;
}
//set the new Memento
m_pMemento = pMemento;
}
private:
Memento *m_pMemento;
};客户端:
[code]int main(){
Originator *pOriginator = new Originator();
pOriginator->SetValue(L"on");
pOriginator->PrintState(); //OutPut: on
//Now I backup the state
Caretaker *pCaretaker = new Caretaker();
pCaretaker->SetMemento(pOriginator->CreateMemento());
//Set the new state
pOriginator->SetValue(L"off");
pOriginator->PrintState(); //OutPut: off
//Recovery to the old state
pOriginator->SetMemento(pCaretaker->GetMemento());
pOriginator->PrintState(); //OutPut: on
if(pCaretaker)
delete pCaretaker;
if(pOriginator);
delete pOriginator;
return 0;
}以上就是C++设计模式浅识备忘录模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!
模板采用响应式设计,自动适应手机,电脑及平板显示;满足单一店铺外卖需求。功能:1.菜单分类管理2.菜品管理:菜品增加,删除,修改3.订单管理4.友情链接管理5.数据库备份6.文章模块:如:促销活动,帮助中心7.单页模块:如:企业信息,关于我们更强大的功能在开发中……安装方法:上传到网站根目录,运行http://www.***.com/install 自动










