c++ 备忘录模式(memento)
来源:互联网 发布:全国网络培训中心 编辑:程序博客网 时间:2024/06/08 11:17
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态[DP]。举个简单的例子,我们玩游戏时都会保存进度,所保存的进度以文件的形式存在。这样下次就可以继续玩,而不用从头开始。这里的进度其实就是游戏的内部状态,而这里的文件相当于是在游戏之外保存状态。这样,下次就可以从文件中读入保存的进度,从而恢复到原来的状态。这就是备忘录模式。
给出备忘录模式的UML图,以保存游戏的存档为例。
代码如下:
#include <iostream>#include <string>#include <vector>using namespace std;class Memento{public: int m_score; //分数 int m_grade; //等级 string m_equipment ; //装备public: Memento(int score,int grade,string equipment):m_score(score),m_grade(grade),m_equipment(equipment) { } Memento& operator=(const Memento &memento) { m_score = memento.m_score; m_grade = memento.m_grade; m_equipment = memento.m_equipment; return *this; }};class GamePlayer{public: GamePlayer():m_score(0),m_grade(0),m_equipment("无装备") { } void load(Memento memento) { m_score = memento.m_score; m_grade = memento.m_grade; m_equipment = memento.m_equipment; } Memento save() { Memento memento(m_score,m_grade,m_equipment); return memento; } void show() { cout << "score: " <<m_score <<endl; cout << "grade: " <<m_grade <<endl; cout << "equipment :" <<m_equipment <<endl; }private: int m_score; //分数 int m_grade; //等级 string m_equipment ; //装备};class Archive{public: Archive() { } void addItem(Memento memento) { m_mementArray.push_back(memento); } Memento Load(int state) { return m_mementArray[state]; }private: std::vector<Memento> m_mementArray;};
主函数:
#include "memento.h"int main(){ Archive archive; GamePlayer player; player.show(); //玩家初始化装备 Memento memento(100,45,"青龙偃月刀"); //玩家装备记录 player.load(memento); player.show(); archive.addItem(memento); //存档游戏 system("pause"); return 0;}
0 0
- 备忘录(Memento)模式
- Memento(备忘录模式)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录(memento)模式
- 备忘录模式(Memento)
- Memento(备忘录模式)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录模式(memento)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- 备忘录模式(Memento)
- Memento Pattern(备忘录模式)
- 《软件调试艺术》读后感六
- AbstractVoiceActivityDetector
- 云安全三大趋势:纵深防御、软件定义安全、设备虚拟化
- Java设计模式之单例与双重锁定
- AsyncTask的缺陷
- c++ 备忘录模式(memento)
- 一点思考
- FrontEnd API 与语音识别前端处理
- 《剑指offer》跳台阶
- 【openwrt】 BitTorrent下载功能设计与实现
- [倚天屠龙记] vim 查找与替换(正则表达式)
- Rcurl小应用,爬取京东评论
- centos7 安装 mariadb-10
- WienerFilter API