您的位置:首页 > 其它

设计模式之备忘录模式

2016-11-19 07:17 375 查看
备忘录模式(Memento)属于行为模式,如果一个对象在运行的过程中需要备份它的状态,就可以考虑用备忘录模式,它用一个备忘录类来存放一个对象内部对象的拷贝,目标对象也可以重新载入备忘录恢复到原来的状态。

下面是备忘录模式的C++实现,代码可到本人github网页下载:设计模式例子

/*
* Example of 'Memento' design pattern.
* Copyright (C) 2016 Leo Wang
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <iostream>
using namespace std;

class CMemento
{
public:
string m_state;
public:
string GetState()
{
return m_state;
};

void SetState(string state)
{
m_state=state;
};

public:
CMemento(string state)
{
SetState(state);
};
};

class CObject
{
public:
string m_state;
public:
void SetState(string state)
{
m_state=state;
};

string GetState()
{
return m_state;
};

void LoadMemento(CMemento* p_memento)
{
SetState(p_memento->GetState());
};

void SetMemento(CMemento* p_memento)
{
p_memento->SetState(m_state);
};

CMemento CreateMemento()
{
return CMemento(m_state);
};
};

int main()
{
CMemento* cp_memento=new CMemento("Hello Cat!");
CObject* cp_obj=new CObject();
cp_obj->LoadMemento(cp_memento);
cout<<cp_obj->GetState()<<endl;
cp_obj->SetState("Hello Dog!");
cp_obj->SetMemento(cp_memento);
cout<<cp_memento->GetState()<<endl;
CMemento mem=cp_obj->CreateMemento();
cout<<mem.GetState()<<endl;
return 1;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式