备忘录模式:
备忘录模式的UML类图:
备忘录模式的实现Demo:
Memento.h
#include <vector>
class Memento;
class GameRole
{
private:
int m_blood;
int m_enery;
public:
GameRole(int blood = 100, int energy = 100);
Memento* Save();
void Load(Memento&);
void Attach();
void Show() const;
};
class Memento
{
public:
int m_blood;
int m_enery;
Memento(int blood=0, int energy=0);
void SetState(const int, const int);
};
class CareTaker
{
private:
std::vector<Memento> vec;
public:
void Save(Memento);
Memento Restore(int index);
};
Memento.cpp
#include"Memento.h"
#include <iostream>
GameRole::GameRole(int blood, int energy) :m_blood(blood), m_enery(energy)
{
}
Memento* GameRole::Save()
{
return new Memento(m_blood, m_enery);
}
void GameRole::Load(Memento& mem)
{
m_blood = mem.m_blood;
m_enery = mem.m_enery;
}
void GameRole::Attach()
{
m_blood -= 10;
m_enery -= 10;
}
void GameRole::Show() const
{
std::cout << m_blood << " " << m_enery << std::endl;
}
Memento::Memento(int blood, int energy)
{
m_blood = blood;
m_enery = energy;
}
void Memento::SetState(int blood, int energy)
{
m_blood = blood;
m_enery = energy;
}
void CareTaker::Save(Memento mem)
{
vec.push_back(mem);
}
Memento CareTaker::Restore(int index)
{
return vec[index];
}
客户端代码:
#include"Memento.h"
int main()
{
CareTaker care;
GameRole role;
role.Show();
care.Save(*(role.Save()));
role.Attach();
role.Show();
care.Restore(0);
role.Load(care.Restore(0));
role.Show();
return 0;
}