设计模式之备忘录模式(C++)

xiaoxiao2025-08-09  32

设计模式之备忘录模式

备忘录,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。该模式很好理解,其UML图如下: 在Originator中提供了创建Memento的接口,具体要保存什么样的内容,则根据需求来定。而Caretaker则是负责管理Memento。而保存的内容的具体的组织方式什么的都封装在Memento中了。这样做耦合性很低,方便维护和扩展。示例代码如下:

// MemoModel.h文件 #pragma once #include <iostream> #include <string> class Memo; class Originator { private: std::string m_state; public: Memo * createMemo(); void show() { std::cout << m_state << std::endl; } void setState(std::string str) { m_state = str; } void recoverState(Memo * p); }; class Memo { public: std::string m_state; Memo(std::string str) { m_state = str; } }; Memo * Originator::createMemo() { return new Memo(m_state); } void Originator::recoverState(Memo * p) { setState(p->m_state); } class Caretaker { private: Memo * m_pMemo; public: Caretaker() : m_pMemo(nullptr) {} ~Caretaker() { if (nullptr != m_pMemo) delete m_pMemo; } Memo * getMemo() { return m_pMemo; } void setMemo(Memo * p) { m_pMemo = p; } };

测试代码如下:

#include <iostream> #include "MemoModel.h" int main() { using namespace std; // 备忘录模式 Originator * p = new Originator; Caretaker * pCare = new Caretaker; // 设置状态 p->setState("A"); p->show(); // 创建备忘录 pCare->setMemo(p->createMemo()); // 更改状态 p->setState("B"); p->show(); // 恢复状态 p->recoverState(pCare->getMemo()); p->show(); delete pCare; delete p; getchar(); return 0; }

测试结果如下图: 备忘录模式把要保存的细节封装在了Memo类中,如果要修改保存细节的话,不会影响到客户端。备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时。

转载请注明原文地址: https://www.6miu.com/read-5034540.html

最新回复(0)