零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数
一.备忘录模式简述
备忘录模式(Memento Pattern)在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
二.备忘录模式模式结构
- Originator(发起人):负责创建一个 Memento,以记录当前时刻自身的内部状态,并可以使用 Memento 恢复内部状态。Originator 可以根据需要决定 Memento 储存自己的哪些内部状态。
- Memento(备忘录):负责存储 Originator 对象的内部状态,并可以防止 Originator 以外的其他对象访问备忘录。
- Caretaker(管理者):负责管理 Memento,但不能对 Memento 的内容进行访问或者操作。
三.备忘录模式优缺点
优点:
- 提供了一种状态恢复机制,使用户能够方便地回到某个历史的状态。
- 实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:
- 如果 Originator 对象很大,那么 Memento 对象也会很大,这势必会占用较大的存储空间,而且每保存一次都需要消耗一定的系统资源。
四.备忘录模式适用场景
- 保存一个对象在某一个时刻的全部(或部分)状态,这样在以后需要时便能够恢复到先前的状态,实现撤销操作。
- 防止外界对象破坏一个对象历史状态的封装性,避免将对象历史状态的实现细节暴露给外界对象。
五.备忘录模式案例分析
很多人说年少时看《大话西游》,看着看着就笑了;长大之后再看,看着看着就哭了。无论是笑了还是哭了,心中总有很多疑惑无法解开。
《大话西游》依托于“月光宝盒”,构建了几个平行时空中发生的爱情故事。其中,有一个经典桥段:
至尊宝在盘丝洞找到盘丝大仙留下的月光宝盒,此时牛魔王带白晶晶来到盘丝洞。白晶晶以为春三十娘和二当家生下的孩子是她和至尊宝所生,愤而自刎。至尊宝为了救白晶晶,使用月光宝盒使时光倒流,几次后产生故障,竟将其带回五百年前,这时紫霞仙子向他走来 …
和“月光宝盒”一样,备忘录模式也提供了时光倒流的机制,将一个对象某个时刻的状态进行备份,当用户后悔(需要返回之前的状态)时,可以把备份调用出来!
六.备忘录模式代码实现
创建备忘录
穿越至某一时刻,这个时刻指具体的日期时间,用 DateTime 表示,并为其提供相应的 setter 和 getter 方法:
/************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): https://www.codersrc.com/
//@File:C++ 设计模式 – 备忘录模式
//@Time:2023/01/31 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/************************************************************************/
// memento.h
#ifndef MEMENTO_H
#define MEMENTO_H
#include <iostream>
#include <string>
// 日期时间
class DateTime
{
public:
DateTime(std::string dt)
: m_dateTime(dt) {}
void SetDateTime(std::string dt) {
m_dateTime = dt;
}
std::string GetDateTime() {
return m_dateTime;
}
private:
std::string m_dateTime;
};
#endif // MEMENTO_H
创建发起人
Life 用于创建 DateTime,以记录当前的日期时间,并可以使用 DateTime 进行恢复:
七.猜你喜欢
- C++ 设计模式 – 单例模式
- C++ 设计模式 – 抽象工厂模式
- C++ 设计模式 – 工厂方法模式
- C++ 设计模式 – 享元模式
- C++ 设计模式 – 桥接模式
- C++ 设计模式 – 模版方法模式
- C++ 设计模式 – 访问者模式
- C++ 设计模式 – 备忘录模式
ChatGPT 3.5 国内中文镜像站免费使用啦
暂无评论内容