设计模式——备忘录模式(C++实现)

  1 #include <iostream>
  2 #include <string>
  3 #include <vector>
  4 
  5 using namespace std;
  6 
  7 class STMemento
  8 {
  9 private:
 10         int iVitality;
 11 public:
 12         STMemento(){}
 13         STMemento(int iVitality)
 14         {
 15                 this->iVitality = iVitality;
 16         }
 17 
 18         int GetVitality() const
 19         {
 20                 return this->iVitality;
 21         }
 22 };
 23 
 24 class STOriginator
 25 {
 26 private:
 27         int iVitality;
 28         string name;
 29 public:
 30         STOriginator(string strName, int iVit): iVitality(iVit), name(strName)
 31         {
 32 
 33         }
 34 
 35         STMemento* SaveState()
 36         {
 37                 return new STMemento(iVitality);
 38         }
 39 
 40         void RecoverState(const STMemento* stMemento)
 41         {
 42                 this->iVitality = stMemento->GetVitality();
 43         }
 44 
 45         void SetVitality(int iVit)
 46         {
 47                 this->iVitality = iVit;
 48         }
 49 
 50         void Show()
 51         {
 52                 cout<< "Name: "<< name<< endl;
 53                 cout<< "Live: "<< iVitality<< endl;
 54         }
 55 };
 56 
 57 class STCareTaker
 58 {
 59 private:
 60         vector<STMemento*> vecStMemento;
 61 
 62 public:
 63         void AddMemento(STMemento* stMemento)
 64         {
 65                 vecStMemento.push_back(stMemento);
 66         }
 67 
 68         STMemento* GetMemento(int Iindex)
 69         {
 70                 if (Iindex >= vecStMemento.size())
 71                         return NULL;
 72                 else
 73                         return vecStMemento[Iindex];
 74         }
 75 };
 76 
 77 int main(int argc, char* argv[])
 78 {
 79         STOriginator* pstOriginator = new STOriginator("xxx", 100);
 80         cout<< "原始状态: "<< endl;
 81         pstOriginator->Show();
 82 
 83         STCareTaker* pstCareTaker = new STCareTaker();
 84         pstCareTaker->AddMemento(pstOriginator->SaveState());
 85 
 86         pstOriginator->SetVitality(50);
 87         cout<< "战斗后状态: "<< endl;
 88         pstOriginator->Show();
 89 
 90         pstOriginator->RecoverState(pstCareTaker->GetMemento(0));
 91         cout<< "归档后状态: "<< endl;
 92         pstOriginator->Show();
 93 
 94         return 0;
 95 }
 96 /////////////////////////////
 97 [root@ ~/learn_code/design_pattern/15_memento]$ ./memento       
 98 原始状态:
 99 Name: xxx
100 Live: 100
101 
102 战斗后状态:
103 Name: xxx
104 Live: 50
105 
106 归档后状态:
107 Name: xxx
108 Live: 100
原文地址:https://www.cnblogs.com/070412-zwc/p/6869259.html