zoukankan      html  css  js  c++  java
  • 设计模式之备忘录模式

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

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

    这些属性包括血量,攻击力等用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();


    }

     

     

     

  • 相关阅读:
    前端面试
    (知乎)我想问一下PHP的学习路线图
    sublime text3如何安装bootstrap的插件
    php项目开发经验-2个月学习php经历
    基于链接的基本排序算法原理
    焦大:特征权重的处理与最终排名(中)
    焦大:特征权重的处理与最终排名(下)
    如何分析和监测竞争对手网站的seo数据
    没收录的页面是否会传递权重
    想学习SEO可以看哪些书籍
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1264637.html
Copyright © 2011-2022 走看看