设计模式之备忘录模式

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

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

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


}

 

 

 

原文地址:https://www.cnblogs.com/lizhengjin/p/1264637.html