1. 描述
捕捉一个对象的状态,在以后能够通过捕捉的状态恢复对象的状态。
2.优点
1)能够恢复历史.(可以和原型模式一块使用)。
3.缺点
保存对象多了,占内存。
4.结构
1)发起人:被备份者,提供备忘录信息。
2)备忘录:保存和提供发起人内部状态
3)备忘录管理者:对备忘录进行保存和获取功能。
5.UML
6.示例
#include "stdafx.h"
#include <iostream>
#include <Set>
//1.发起者
class RoleStateMemento;
class Role
{
public:
Role(int v, int a, int d)
{
_Vitality = v;
_Attack = a;
_Defense = d;
}
void SetVitalit(int v)
{
_Vitality = v;
}
void SetAttack(int a)
{
_Attack = a;
}
void SetDefense(int d)
{
_Defense = d;
}
RoleStateMemento * SaveState();
void RecoveryState(RoleStateMemento * r);
void Print()
{
std::cout << "血量:" << _Vitality << "攻击力:" << _Attack <<"防御力:" << _Defense << std::endl;
}
private:
int _Vitality;//血量
int _Attack;//攻击力
int _Defense;//防御力
};
//2.备忘录
class RoleStateMemento
{
public:
RoleStateMemento(int v, int a, int d)
{
_Vitality = v;
_Attack = a;
_Defense = d;
}
public:
int _Vitality;//血量
int _Attack;//攻击力
int _Defense;//防御力
};
//3.备忘录管理
class RoleStateManager
{
public:
void SetRoleStateMemento(RoleStateMemento * s)
{
_RoleStateMemento = s;
}
RoleStateMemento * GetRoleStateMemento()
{
return _RoleStateMemento;
}
private:
RoleStateMemento * _RoleStateMemento;
};
RoleStateMemento * Role::SaveState()
{
RoleStateMemento * r = new RoleStateMemento(_Vitality, _Attack, _Defense);
return r;
}
void Role::RecoveryState(RoleStateMemento * r)
{
_Vitality = r->_Vitality;
_Attack = r->_Attack;
_Defense = r->_Defense;
}
int main()
{
Role xiaoming(100,100,100);
xiaoming.Print();
RoleStateMemento * r1 = xiaoming.SaveState();//进度
RoleStateManager * Manager = new RoleStateManager;
Manager->SetRoleStateMemento(r1);//保存进度
xiaoming.SetVitalit(60);
xiaoming.SetAttack(60);
xiaoming.SetDefense(60);
xiaoming.Print();
xiaoming.RecoveryState(Manager->GetRoleStateMemento());
xiaoming.Print();
getchar();
return 0;
}