zoukankan      html  css  js  c++  java
  • 设计模式——备忘录模式(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
  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6869259.html
Copyright © 2011-2022 走看看