一、说明
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。
二、代码
#ifndef BEIWANGLU_H
#define BEIWANGLU_H
#include <QWidget>
#include <QDebug>
typedef struct{
int grade;//级别
QString arm;//武器
QString corps;//兵团
}GameValue;
class memorandum{
public:
memorandum();
memorandum(GameValue game){
m_game = game;
}
~memorandum();
GameValue getValue(){
return m_game;
}
private:
GameValue m_game;
};
class organizer{
public:
organizer();
organizer(GameValue game){
m_game = game;
}
~organizer();
void addGrade(){
m_game.grade++;
}
void modifyArm(QString arm){
m_game.arm = arm;
}
void modifyCorps(QString corps){
m_game.corps = corps;
}
memorandum saveValue(){
memorandum mem(m_game);
return mem;
}
void load(memorandum mem){
m_game = mem.getValue();
}
void showValue(){
qDebug()<<m_game.grade;
qDebug()<<m_game.arm;
qDebug()<<m_game.corps;
}
private:
GameValue m_game;
};
class taker{
public:
taker();
taker(memorandum mem){
m_mem = mem;
}
memorandum load(){
return m_mem;
}
private:
memorandum m_mem;
};
class demo1{
public:
demo1(){
GameValue g = {0,"AK","MI six"};
organizer org(g);
org.addGrade();
org.showValue();
taker take(org.saveValue());
org.addGrade();
org.modifyArm("ss");
org.modifyCorps("kk");
org.showValue();
//通过备忘录模式恢复数据
org.load(take.load());
org.showValue();
}
};
#endif // BEIWANGLU_H