• 设计模式——备忘录模式(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
  • 相关阅读:
    Java学习笔记之---单例模型
    Java学习笔记之---内部类
    Java项目案例之--封装的实例
    Java学习笔记之---构造方法
    Java学习笔记之---static
    Java学习笔记之---面向对象
    咨询顾问与逻辑思客
    最重要与靠不住之间如何平衡
    《网络借贷信息中介机构业务活动管理暂行办法》
    商业银行法律法规与监管要求汇总
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6869259.html
Copyright © 2020-2023  润新知