您的位置:首页 > 编程语言 > C语言/C++

设计模式观后(c++还原之二十一 备忘录模式)

2014-09-29 23:03 246 查看
//备忘录模式
//就是给发起人等给个备份,好恢复  前面的原型模式刚好可以用上(clone函数)
//例子很简单会相对注释

//备忘录角色
class Originator;
class Memento {
private:
string m_state;
public:
Memento(string _state) {
m_state = _state;
}
string GetState() {
return m_state;
}
void SetState(string _state) {
m_state = _state;
}
};
//发起人角色
class Originator {
private:
string m_state;
Originator* m_pOrigin;
public:
string GetState() {
return m_state;
}
void SetState(string state) {
m_state = state;
}
//创建备忘录
Memento* CreateMemento() {
Memento* _p = new Memento(m_state);
return _p;
}
//恢复备忘录
void RestoreMemento(Memento* p) {
SetState(p->GetState());
}
Originator* Clone() {
//只有一个参数,我就不写赋值和复制函数了(可别忘了深拷贝哟)
Originator* p = new Originator;
p->SetState(m_state);
return p;
}
};
//备忘录管理员角色
class Caretaker {
private:
vector<Memento*> m_vOrig;
public:
Memento* GetMemento() {
return m_vOrig.back();
}
void AddMemento(Memento* p) {
m_vOrig.push_back(p);
}
};
class Client {
public:
static void main() {
Originator* p_originator = new Originator;
p_originator->SetState("www");
cout << p_originator->GetState() << endl;
//创建备份管理员
Caretaker* p_caretaker = new Caretaker;
p_caretaker->AddMemento(p_originator->CreateMemento());

p_originator->SetState("ddd");
cout << p_originator->GetState() << endl;

p_originator->RestoreMemento(p_caretaker->GetMemento());
cout << p_originator->GetState() << endl;
}
};
//看完了模式,自己书写后,感觉有些遗憾
//首先,clone函数没有使用,Memento的保存我认为还是用clone函数保存为好(这样不用重新构造数据)。
//第二,Memento函数最好用模板编程来书写,可惜我的模板指针封装坏了,就没写。多看下泛型编程了
int _tmain(int argc, _TCHAR* argv[])
{
locale::global(locale(""));
Client::main();
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: