备忘录模式

2014-11-23 19:07:59 · 作者: · 浏览: 22
录模式备忘,在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 \
Originator:发起人也就是需要保存的类,负责创建一个Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的那些内部状态。 Memento:负责存储OriginatZ http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcrbUz/O1xMTasr/XtMyso6yyor/Jt8DWuU9yaWdpbmF0b3LS1M3itcTG5Mv7ttTP87fDzsqxuM38wrxNZW1lbnRvoaOxuM38wrzT0MG9uPa907/ao6xDYXJldGFrZXLWu8Tcv7S1vbG4zfzCvLXE1a2907/ao6zL/Na7xNy9q7G4zfzCvLSrtd24+Mbky/y21M/zoaNPcmlnaW5hdG9yxNy5u7+0tb3Su7j2v+2907/ao6zUytDty/y3w87Kt7W72LW9z8jHsNe0zKzL+dDotcTL+dPQyv2+3aGjCiAgICAgIENhcmV0YWtlcqO6udzA7dXfo6y4utTwsaO05rrDTWVtZW50b6OssrvE3LbUsbjN/MK8tcTE2sjdvfjQ0LLZ1/e78rzssumhowqjqGNsb25ltcS3vcq90rK/ydLUyrXP1rG4zfyjrLWrysfV4tH5tcS7sM7Sw8fP4LWx09q21MnPsuPTptPDv6q3xcHLT3JpZ2luYXRvcrXEyKuyv73Tv9qjrNXi1NrT0NCpyrG68srHsru6z8rKtcSjrLb4x9KjrGNsb25lu+G4tNbGyKuyv8TayN2jrLb4srvE3LbUsr+31r340NCxuM38oaPB7c3io6zKudPDsbjN/MK8xKPKvb/J0tSw0bi01NO1xLbUz/PE2rK/0MXPorbUxuTL+7bUz/PGwbHOxvDAtKGjo6kKPGJyPgoKPHN0cm9uZz7KytPDs6G+sKO6PC9zdHJvbmc+CjxzdHJvbmc+TWVtZW50bzwvc3Ryb25nPsSjyr2xyL3PysrTw9PauabE3LHIvc+4tNTTtcSjrLWr0OjSqs6su6S78rzHwrzK9NDUwPrKt7XEwOCjrLvy1d/Q6NKqsaO05rXEyvTQ1Na7ysfW2rbgyvTQ1NbQtcTSu9Chsr+31sqxo6xPcmlnaW5hdG9yv8nS1Lj5vt2xo7TmtcRNZW1lbnRv0MXPoru51K21vcew0rvXtMysoaMKPGJyPgoKtPrC66O6Ci8vTWVtZW50by5oCgo8cHJlIGNsYXNzPQ=="brush:java;">#include "stdafx.h" #include #include using namespace std; class Memento { private: string m_Name; int m_Age; public: Memento(string name, int age) :m_Name(name), m_Age(age){} string GetName() { return m_Name; } int GetAge() { return m_Age; } }; class Originator { private: string m_Name; int m_Age; public: Originator(string name, int age) :m_Name(name), m_Age(age){} void SetName(string name){ m_Name = name; } void SetAge(int age){ m_Age = age; } Memento* CreateMemento() { return(new Memento(m_Name, m_Age)); } void RecoveryMemento(Memento* memento) { m_Name = memento->GetName(); m_Age = memento->GetAge(); } void Show() { cout << "m_Name=" << m_Name << " "; cout << "m_Age=" << m_Age << endl; cout << endl; } }; class Caretaker { public: ~Caretaker() { delete m_Memento; } void SetMemento(Memento* pMemento) { m_Memento = pMemento; } Memento* GetMemento() { return m_Memento; } private: Memento* m_Memento; }; // MementoPattern.cpp
// MementoPattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Memento.h"

int _tmain(int argc, _TCHAR* argv[])
{
	Originator originator("Angel", 5);
	Caretaker* caretaker = new Caretaker();
	caretaker->SetMemento(originator.CreateMemento());
	originator.Show();

	originator.SetAge(6);
	originator.Show();

	originator.RecoveryMemento(caretaker->GetMemento());
	originator.Show();

	getchar();
	return 0;
}