[行为型模式] 备忘录模式的理解

[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=13770720612900431&size=800_600&devtype=web&v=1.0.1&rtick=14676146429127&share_qid=108635719&sign=35a231a5a118e9bbf5376407af1df7d1&[/img]
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145749467500&size=800_600&devtype=web&v=1.0.1&rtick=14676146452631&share_qid=108635719&sign=3a796c1ee8fa23e38dc0477615a6d7ee&[/img]
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145739462727&size=800_600&devtype=web&v=1.0.1&rtick=14676146458843&share_qid=108635719&sign=7e0b4aad46b013172c95653e58134075&[/img]

[color=red][b]头文件[/b][/color]

//MementoPattern.h

#ifndef MEMENTO_PATTERN_H
#define MEMENTO_PATTERN_H

#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;

namespace MementoPattern
{
//备忘者类备份发起者的状态
class Memento
{
public:
//构造的时候备份数据
Memento(string strState):m_strState(strState){ }

void SetState(string strState){ m_strState = strState; }

friend class Originator;

private:
string m_strState;
};

//发起者类备份自己的状态
class Originator
{
public:
//建立备份
Memento* CreateBackups(){ return new Memento(m_strState); }

//恢复备份内容
void RestoreBackups(Memento* pMemento)
{
m_strState = pMemento->m_strState;
}

//显示状态
void Show()
{
cout<<m_strState<<endl;
}

void SetState(string strState){ m_strState = strState; }

private:
string m_strState;
};

//管理者类管理备份
class Caretaker
{
public:
//得到备份
Memento* GetMemento()
{
return m_pMemento;
}
//设置备份
void SetMemento(Memento* pMemento)
{
m_pMemento = pMemento;
}

private:
Memento* m_pMemento;
};

//
void MementoPattern_Test();
}

#endif


[color=red][b]实现[/b][/color]

#include "MementoPattern.h"
#include <iostream>
using namespace std;

namespace MementoPattern
{
//
void MementoPattern_Test()
{
//设置和显示状态
Originator o;
o.SetState("ON");
o.Show();

//创建备份
Memento* m = o.CreateBackups();

//管理备份
Caretaker c;
c.SetMemento(m);

//设置和显示状态
o.SetState("OFF");
o.Show();

//恢复备份
m = c.GetMemento();
o.RestoreBackups(m);

//显示状态
o.Show();
}
}


[color=red][b]客户端[/b][/color]

#include "MementoPattern.h"
#include <iostream>
#include <sstream>
#include <string>
#include <list>
using namespace std;
using namespace MementoPattern;

void main()
{
MementoPattern_Test();
}


运行结果
[img]https://api5.yunpan.360.cn/intf.php?method=Share.getPublicThumbByNid&qid=108635719&nid=14676145999492298&size=800_600&devtype=web&v=1.0.1&rtick=14676146459049&share_qid=108635719&sign=f81047e343fe2795f96343a552af2e23&[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值