C++设计模式——备忘录模式(高屋建瓴)

原文地址:https://blog.csdn.net/qq_33232152/article/details/94325685
对代码做出修改
//将每一种状态即设置的string封装成类Memento,想回到哪种状态,就返回到哪个Memento

#include<iostream>
#include<string>
#include<vector>
using namespace std;

class Memento {
 public:
  Memento(string tstate):state_(tstate) {}
  ~Memento() {}
  string getState() {
    return state_;
  }
 private:
  string state_;
};

class Originator {
 public:
  Originator() {}
  ~Originator() {}

  void setState(string tstate) { state_ = tstate; }
  string getState() {
    return state_;
  }
  Memento* saveStateToMemento() {
    return new Memento(state_);
  }

  void getStateFromMemento(Memento *Memento) {
    state_ = Memento->getState();
  }
  
 private:
  string state_;
};

class CareTaker {
 public:
  CareTaker() {}
  ~CareTaker() {
    vector<Memento*>::iterator it;
    for (it = memento_lsit_.begin(); it != memento_lsit_.end(); ++it) {
      delete (*it);
      (*it) = NULL;
    }
  }
  
  void add(Memento *state) {
    memento_lsit_.push_back(state);
  }

  Memento* get(int index) {
    return memento_lsit_[index];
  }
private:
 vector<Memento*> memento_lsit_;
};

int main(){
  Originator *originator = new Originator();
  CareTaker *careTaker = new CareTaker();
  originator->setState("State #1");
  originator->setState("State #2");
    careTaker->add(originator->saveStateToMemento());
  originator->setState("State #3");
  careTaker->add(originator->saveStateToMemento());
  originator->setState("State #4");
  
  cout<<"Current State: " << originator->getState()<<endl;
  originator->getStateFromMemento(careTaker->get(0));
  cout<<"First saved State: " << originator->getState() << endl;
  originator->getStateFromMemento(careTaker->get(1));
  cout << "Second saved State: " << originator->getState() << endl;
  
  delete originator;
  originator = NULL;
  delete careTaker;
  careTaker = NULL;
}

输出结果:

Current State: State #4
First saved State: State #2
Second saved State: State #3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值