• 设计模式之备忘录模式


        最近看了设计模式一书,感觉没什么难度,无非就是多态和继承的应用,今天先谈

    一下备忘录模式从游戏的角度来说所谓的备忘录也就是对怪物的属性做一个备份,

    这些属性包括血量,攻击力等用Menento保存这些属性,Menento只有存取的方法

    和一个结构差不多,而Orginator类则用来存取Menentor类(或者说是结构),Caretaker

    用来保存Menentor的初始值,这样就可以随时恢复备忘录了

        如果用简单的例子表示  int i = 1; int j; int m;备忘录的过程如下  j = i; m = j;

    然后j = 2;再j = m;这个过程解释如下就是先把 i = 1的值存入j,然后再把j=1存入m;

    这样就保存了初值,然后呢j的值会变化比如变成2,最后再通过保存的初值m把j恢复为1, 

     如果用类表示代码如下

    #include "iostream.h"
    class Memento//仅仅包括属性和简单的取出取入函数
    {
    public:
     Memento(){}
     Memento(int state){this->state = state;}
     virtual ~Memento(){}
     void GetState(int &state){state = this->state;}
     void SetState(int state){this->state = state;}
    public:
     int state;
    };

    class Originator
    {
    public:
     Originator(){}
     virtual ~Originator(){}
     Memento *CreateMemento(){return new Memento(state);}//初始化
     void SetMemento(Memento me){state = me.state;}//恢复
     void Show(){cout<<state<<endl;}
    public:
     int state;
    };

    class Caretaker
    {
    public:
     Caretaker(){}
     virtual~Caretaker(){}
     void GetMenento(Memento &me){me = this->me;}//
     void SetMenento(Memento *me){this->me = *me;}//保存Menento
    public:
     Memento me;
    };

    void main()
    {
        Originator *o = new Originator();
     o->state = 1;
     o->Show();

     Caretaker *c = new Caretaker();
     c->SetMenento(o->CreateMemento());

     o->state = 2;
     o->Show();

     o->SetMemento(c->me);
     o->Show();


    }

     

     

     

  • 相关阅读:
    【转】直方图中bins的理解及处理
    [LeetCode] 1. Two Sum
    数据结构课学到的常用知识总结概括
    Java核心技术第三章数据类型
    mysql 出现You can't specify target table for update in FROM clause错误的解决方法
    mysql 从一个表中查数据并插入另一个表实现方法
    使用ECharts,绘制柱状图
    mysql 查询1小时内_mysql查询一个小时之内的数据
    mysql查询表中所有字段的名字
    MySQL 时间函数总集
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1264637.html
Copyright © 2020-2023  润新知