C++ 备忘录模式(Memento)

it2022-05-05  203

简介

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

数据库连接的事务管理就是备忘录模式。

应用场景

需要提供保存和恢复数据的相关状态场景。 提供一个可回滚rollback操作。

代码如下:

#include <iostream> #include <string> #include <memory> #include <map> #include <list> //备忘录类 class memento { public: memento(std::string state) : m_state(state) { } const std::string &get_state(void) { return m_state; } void set_state(std::string state) { m_state = state; } private: std::string m_state; }; //管理者类 class caretaker { public: void set_memento(const std::shared_ptr<memento> &mmt) { m_memento = mmt; } const std::shared_ptr<memento> get_memento(void) { return m_memento; } private: std::shared_ptr<memento> m_memento; }; class originator { public: const std::string &get_state(void) { return m_state; } void set_state(std::string state) { m_state = state; } std::shared_ptr<memento> create_memento(void) { return std::make_shared<memento>(m_state); } void set_memento(const std::shared_ptr<memento> &mmt) { set_state(mmt->get_state()); } void show(void) { std::cout << "my state is : " << m_state << std::endl; } private: std::string m_state; }; int main() { std::cout << "start-up .." << std::endl; std::shared_ptr<originator> ogt = std::make_shared<originator>(); ogt->set_state("周一,一晚10次!"); ogt->show(); std::shared_ptr<caretaker> ctk = std::make_shared<caretaker>(); ctk->set_memento(ogt->create_memento()); ogt->set_state("周二,一晚2次!"); ogt->show(); ogt->set_memento(ctk->get_memento()); ogt->show(); std::cout << "done .." << std::endl; return 0; }

运行如下:


最新回复(0)