设计模式读书笔记:Memento(备忘录)
2015-07-10 21:11:10
意图:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
结构图:来自 《23种设计模式 - 郗晓勇》
实现:https://github.com/panshiqu/patterns/tree/master/Memento
Memento
namespace NS_MEMENTO {
class Memento {
public:
virtual ~Memento() {}
private:
friend class Originator;
Memento() : _state(false) {}
bool getState(void) { return _state; }
void setState(bool state) { _state = state; }
private:
bool _state;
};
} /* namespace NS_MEMENTO */
Originator
#include "Memento.h"
namespace NS_MEMENTO {
class Originator {
public:
Originator() : _state(false) {}
virtual ~Originator() {}
Memento *createMemento(void)
{
Memento *m = new Memento();
m->setState(_state);
return m;
}
void setMemento(Memento *m)
{
setState(m->getState());
}
bool getState(void) { return _state; }
void setState(bool state) { _state = state; }
private:
bool _state;
};
} /* namespace NS_MEMENTO */
main
#include <iostream>
#include "Memento/Memento.h"
#include "Memento/Originator.h"
using namespace NS_MEMENTO;
using namespace std;
int main(void)
{
Originator o;
Memento *m = o.createMemento();
o.setState(true);
o.setMemento(m);
delete m;
std::cout << o.getState() << std::endl;
}
附加: