适用情境:在一个对象外部记录其状态,在对象状态改变后提供恢复以前状态的功能.
// device.h
#ifndef DEVICE_H
#define DEVICE_H
#include "memo.h"
class Device
{
public:
Device();
Memo* CreateMemo();
void Recover(Memo* memo);
void Show();
public:
int m_state_code;
};
#endif // DEVICE_H
//device.cpp
#include "device.h"
#include <iostream>
Device::Device(){}
Memo* Device::CreateMemo()
{
return new Memo(m_state_code);
}
void Device::Recover(Memo *memo)
{
m_state_code = memo->m_state_code_bak;
}
void Device::Show()
{
std::cout << m_state_code << std::endl;
}
// memo.h
#ifndef MEMO_H
#define MEMO_H
class Memo
{
public:
Memo(int state_code);
int m_state_code_bak;
};
#endif // MEMO_H
// memo.cpp
#include "memo.h"
Memo::Memo(int state_code)
{
m_state_code_bak = state_code;
}
// caretaker.h
#ifndef CARETAKER_H
#define CARETAKER_H
#include "memo.h"
class Caretaker
{
public:
Caretaker();
Memo* m_memo;
};
#endif // CARETAKER_H
// caretaker.cpp
#include "caretaker.h"
Caretaker::Caretaker(){}
客户端:
// main.cpp
#include <iostream>
#include "memo.h"
#include "caretaker.h"
#include "device.h"
using namespace std;
int main(int argc, char *argv[])
{
Device *dev = new Device();
dev->m_state_code = 100;
dev->Show();
Caretaker *taker = new Caretaker();
taker->m_memo = dev->CreateMemo();
dev->m_state_code = 222;
dev->Show();
dev->Recover(taker->m_memo);
dev->Show();
return 0;
}