加班,得到老板零食

2016/9/23 非常高兴

Posted by WangXiaoDong on September 23, 2016

时间:2016年9月23日 天气:晴:sunny:


Author:冬之晓:angry:
Email: 347916416@qq.com
MyAppearance: MyAppearance

    今天晚上加班,领导看到了,给我们拿了好多零食,非常高兴!

今天感觉收获挺大的:

其一是吧一个Qt的关于文本编辑的第三方库给弄懂了用法,这个使用方法我要等明天或后天写一个专题总结一下!!

其二是发现了一个UDP连不上处理的简单方法,以前每次UDP连接不上我都是直接重置电脑!这样每次电脑里面的软件都需要全部重新安装,费时费力! 这一次我发现直接使用驱动精灵或者360里面的“连接不上网”的选项,重置一下网络的设置就好了!!!!以前我真的是太笨啦!!!

设计模式(十七)————备忘录模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态

就拿游戏的角色数据来举个例子:

#ifndef GAMEROLE
#define GAMEROLE
#include <QtDebug>

//角色状态存储箱
class RoleStateMemento
{
public:
    RoleStateMemento(int vit,int atk,int def):_vit(vit),_atk(atk),_def(def){}
    int getVitality(){return _vit;}
    void setVitality(int vit){_vit=vit;}
    int getAttack(){return _atk;}
    void setAttack(int atk){_atk=atk;}
    int getDefense(){return _def;}
    void setDefense(int def){_def=def;}
private:
    int _vit;
    int _atk;
    int _def;
};
//游戏角色
class GameRole
{
public:
    int getVitality(){return _vit;}
    void setVitality(int vit){_vit=vit;}
    int getAttack(){return _atk;}
    void setAttack(int atk){_atk=atk;}
    int getDefense(){return _def;}
    void setDefense(int def){_def=def;}
    QSharedPointer<RoleStateMemento> SaveState(){return QSharedPointer<RoleStateMemento>(new RoleStateMemento(_vit,_atk,_def));}
    void RecoveryState(RoleStateMemento me){_vit=me.getVitality();_atk=me.getAttack();_def=me.getDefense();}
    void stateDisplay()
    {
        qDebug()<<"角色当前状态:";
        qDebug()<<"体力:"<<_vit;
        qDebug()<<"攻击力:"<<_atk;
        qDebug()<<"防御力:"<<_def;
    }
private:
    int _vit;
    int _atk;
    int _def;
};
//角色状态管理者
class RoleStateCaretaker
{
public:
    RoleStateCaretaker(int vit=0,int atk=0,int def=0):_meto(RoleStateMemento(vit,atk,def)){}
    void setRoleStateMemento(RoleStateMemento meto){_meto=meto;}
    RoleStateMemento getRoleStateMemento(){return _meto;}
private:
    RoleStateMemento _meto;
};

#endif // GAMEROLE

这样就可以随时进行游戏数据的存储和取得啦,主程序可以模拟这一个过程:

#include "gamerole.h"
#include <QtDebug>

int main(int argc, char *argv[])
{
    //大战前
    GameRole *gr = new GameRole();
    gr->setAttack(100);gr->setDefense(100);gr->setVitality(100);
    qDebug()<<"初始";
    gr->stateDisplay();

    //保存进度
    RoleStateCaretaker *roleAdm = new RoleStateCaretaker();
    roleAdm->setRoleStateMemento(*gr->SaveState());

    //大战boss,损失严重
    gr->setAttack(50);gr->setDefense(50);gr->setVitality(50);
    qDebug()<<"大战后";
    gr->stateDisplay();

    //恢复之前状态
    gr->RecoveryState(roleAdm->getRoleStateMemento());
    qDebug()<<"读取存档后";
    gr->stateDisplay();
    return 0;
}

由这个例子可以看大,RoleStateCaretaker类管理着一个RoleStateCaretaker类的实例,可以随时保存和恢复这个实例里面的数据。这样就做到了备忘录模式的核心内容————保存和恢复!

最后放上源码地址:https://github.com/Dongzhixiao/designMode_qt/tree/master/gameSave_Memento_Pattern_18