目录
1、备忘录模式(Memento Pattern)含义
2、备忘录模式的UML图学习
3、备忘录模式的应用场景
4、备忘录模式的优缺点
(1)优点:
(2)缺点
5、C++实现备忘录模式的实例
1、备忘录模式(Memento Pattern)含义
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。【DP】
备忘录模式(Memento Pattern)是一种行为型设计模式,用于在不破坏封装性的前提下捕获和存储一个对象的内部状态,并在需要时恢复该状态。它将对象的状态保存到备忘录对象中,然后可以通过备忘录对象来还原对象的状态。
2、备忘录模式的UML图学习
备忘录模式的主要角色包括:
(1)Originator(发起人):负责创建一个备忘录对象,用于记录当前对象的内部状态,并可以使用备忘录对象来恢复其状态。
(2)Memento(备忘录):用于存储Originator对象的内部状态。
(3)Caretaker(管理者):负责保存备忘录对象,但不能对备忘录对象进行修改或检查。
3、备忘录模式的应用场景
(1)需要保存和恢复对象的历史状态。
(2)需要提供撤销操作或者回滚操作的系统。
(3)需要对对象的状态进行快照并进行比较的系统。
4、备忘录模式的优缺点
(1)优点:
1)提供了一种可靠的方式来保存和恢复对象的状态,避免了直接暴露对象的内部细节。
2)备忘录对象与原始对象解耦,使得原始对象可以专注于业务逻辑,而不必关心状态的保存和恢复。
3)可以灵活地扩展备忘录对象的功能,例如支持多个历史状态的保存和恢复。
(2)缺点
1)如果原始对象的状态较大或者频繁改变,会占用较大的内存空间。
2)在保存和恢复状态时,需要进行对象的序列化和反序列化操作,可能会影响性能。
5、C++实现备忘录模式的实例
#include <iostream>
#include <string>// 备忘录类
class Memento {
public: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() {return Memento(state_);}void restoreMemento(const Memento& memento) {state_ = memento.getState();}private:std::string state_;
};// 管理者类
class Caretaker {
public:void saveMemento(const Memento& memento) {memento_ = memento;}Memento retrieveMemento() const {return memento_;}private:Memento memento_;
};int main()
{Originator originator;Caretaker caretaker;// 设置初始状态originator.setState("State 1");std::cout << "Current state: " << originator.getState() << std::endl;// 保存状态caretaker.saveMemento(originator.createMemento());// 修改状态originator.setState("State 2");std::cout << "Current state: " << originator.getState() << std::endl;// 恢复状态originator.restoreMemento(caretaker.retrieveMemento());std::cout << "Restored state: " << originator.getState() << std::endl;return 0;
}
在上述示例中,Originator类表示发起人,Caretaker类表示管理者,Memento类表示备忘录。通过调用createMemento方法可以创建一个备忘录对象,并通过restoreMemento方法来恢复对象的状态。