本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客
模式说明:
- 方案:备忘录模式用于捕获对象的内部状态,并在需要时将对象恢复到先前的状态。它包括三个关键角色:发起者(Originator)、备忘录(Memento)、管理者(Caretaker)。发起者负责创建备忘录,以便在以后能够恢复对象的状态。备忘录对象存储发起者的内部状态。管理者对象负责保存和获取备忘录。
- 优点:允许对象在不破坏封装的情况下保存和恢复其内部状态。可以简化对象状态的管理,并提供了撤销操作的支持。
- 缺点:可能会消耗较多的内存,尤其是当备忘录对象过多时。需要小心管理备忘录的生命周期,以避免内存泄漏。且频繁的内存拷贝也会导致CPU资源吃紧
本质思想:建立一个M类,可以由A类生产。A类也可以由M类还原。类似于,word写文章时,会自动保存中间状态,而这些中间状态,也可以完全恢复当时的文章。
实践建议:在低频且重要的逻辑中使用,因为此模式不仅费内存,也费CPU。
代码示例:
cpp
#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;
}