本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客
模式说明:
- 方案:备忘录模式用于捕获对象的内部状态,并在需要时将对象恢复到先前的状态。它包括三个关键角色:发起者(Originator)、备忘录(Memento)、管理者(Caretaker)。发起者负责创建备忘录,以便在以后能够恢复对象的状态。备忘录对象存储发起者的内部状态。管理者对象负责保存和获取备忘录。
- 优点:允许对象在不破坏封装的情况下保存和恢复其内部状态。可以简化对象状态的管理,并提供了撤销操作的支持。
- 缺点:可能会消耗较多的内存,尤其是当备忘录对象过多时。需要小心管理备忘录的生命周期,以避免内存泄漏。且频繁的内存拷贝也会导致CPU资源吃紧
本质思想:建立一个M类,可以由A类生产。A类也可以由M类还原。类似于,word写文章时,会自动保存中间状态,而这些中间状态,也可以完全恢复当时的文章。
实践建议:在低频且重要的逻辑中使用,因为此模式不仅费内存,也费CPU。
代码示例:
#include <iostream>
#include <string>// 备忘录类
class Memento {
public:Memento() = default; // 添加默认构造函数Memento(const std::string& state) : state_(state) {}std::string getState() const { return state_; }
private:std::string state_;
};// 原始对象类
class Originator {
public:void setState(const std::string& state) { state_ = state; }std::string getState() const { return state_; }Memento createMemento() const { return Memento(state_); }void restoreMemento(const Memento& memento) { state_ = memento.getState(); }
private:std::string state_;
};// 管理者类
class Caretaker {
public:Caretaker() = default; // 添加默认构造函数void setMemento(const Memento& memento) { memento_ = memento; }Memento getMemento() const { return memento_; }
private:Memento memento_;
};int main() {// 创建原始对象Originator originator;originator.setState("State1");// 创建备忘录并保存状态Caretaker caretaker;caretaker.setMemento(originator.createMemento());// 修改原始对象的状态originator.setState("State2");// 恢复原始对象的状态originator.restoreMemento(caretaker.getMemento());// 输出恢复后的状态std::cout << "Restored state: " << originator.getState() << std::endl;
/*
输出:Restored state: State1
*/return 0;
}