我用过的设计模式(9)-- 备忘录模式

简介:

在这里插入图片描述
@[toc]

如果能重来

“如果能重来,我要选李白···”,“曾经有一份····”,“多渴望能够 找到一条时光隧道,重回到简单,容易觉得美好”,“我靠,我被Boss打死了,还好我有存档”····

哈哈哈,如果时光能倒流,那该能圆了我们多少遗憾。如果能重来,我决不会在你最重要的那段时间离开,回头也已经于事无补了。

在从程序设计中,有一个“美名昭著”的“重来”,对,就是栈。

不过栈嘛,好用是固然的,但它和我们今天要讲的“备忘录模式”并不相冲,反而,还是相辅相成的呢。

"时光隧道"

我也曾写过一些需要保存临时数据的功能,但是写那些功能的时候是真的烦躁,因为我需要创建很多的对象,然后将数据一个一个塞进去,取出来的时候又要将数据一个一个进行输出,这让我感觉很不爽。不仅仅是工作量大,代码重复度又高,关键是有些数据,它明明应该是私有变量,就这样变成了公有变量,这让我很相当不满意,毕竟有谁会愿意把自己的美好回忆公开呢?

这时候我们就需要使用一些技巧,在不破坏封装性的前提下,将内部数据取出,存放,后期恢复。

这里我们需要学习一下”备忘录模式“的整体思路:
在这里插入图片描述Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可以根据需要决定Memento的存储内容。

Memento(备忘录):负责存储Originator的内部状态,并可防止Originator以外的对象访问备忘录。备忘录有两个接口,Carataker只能看到备忘录的窄接口。

Caretaker(管理者):负责保存好备忘录,不能对备忘录内容进行操作或检查。

代码实现

#include<iostring>
#include<string>    //以此替代结构体,结构体要自己定义

using namespace std;
//备忘录
class Memento{
private:
    string State;//状态,建议使用结构体存储

public:
    Memento(string value){State = value;}
    string get_State(return State;);
}
//发起人

class Originator{
private:
    string State;    //状态,建议使用结构体存储

public:
    string get_state(){return State;}    
    void set_state(string value){State = value;}
    
    Memento Create_Memento(){return (new Memento(State));}    //创建备忘录,将当前需要的信息导入并实例化出一个Memento对象
    void set_memento(Memento *memento){State = memento->get_State();}    //恢复备忘录

    void show(){cout<<State<<endl;}    //显示数据    
};
//管理者类
class Caretaker{
private:
    Memento *memento;

public:
    Memento get_Memento(){return memento;}    //得到备忘录
}
//主函数

int main()
{
    Originator *o = new Originator();
    o->set_state("A");
    o->show();

    Caretaker *c = new Caretaker();
    c->memento = o.Create_Memento();//保存状态。有管理类挡在前面,很好的隐藏了备忘录类的实现细节

    o->set_state("B");    //更改状态
    o->show();
    
    o->set_memento(c->memento);    //恢复状态,解释同上
    o->show();
}

应用场景

你懂得。

相关文章
|
6月前
|
设计模式 存储 Java
23种设计模式,备忘录模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】备忘录模式是一种行为设计模式,它能在不破坏对象封装的前提下,捕获并保存对象的当前状态,以便后面可以恢复到这个状态。
86 0
|
6月前
|
设计模式 存储 Java
【设计模式】备忘录模式
【设计模式】备忘录模式
|
6月前
|
设计模式 存储 Java
浅谈设计模式 - 备忘录模式(十五)
浅谈设计模式 - 备忘录模式(十五)
47 0
|
6月前
|
设计模式 存储 Java
Java设计模式【十九】:备忘录模式
Java设计模式【十九】:备忘录模式
40 0
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
3月前
|
设计模式 算法
设计模式的基础问题之备忘录模式在软件开发的问题如何解决
设计模式的基础问题之备忘录模式在软件开发的问题如何解决
|
5月前
|
设计模式
备忘录模式-大话设计模式
备忘录模式-大话设计模式
|
4月前
|
设计模式 数据处理
iLogtail设计模式问题之什么是备忘录模式
iLogtail设计模式问题之什么是备忘录模式
|
5月前
|
设计模式 存储 Java
Java设计模式之备忘录模式详解
Java设计模式之备忘录模式详解
|
6月前
|
存储 设计模式 安全
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
备忘录模式是一种行为设计模式,允许在不破坏对象封装性的情况下保存和恢复对象的内部状态。该模式通过创建备忘录对象来存储发起人的状态信息,发起人可根据需要创建和恢复备忘录。管理者则负责保存和管理备忘录,但无法访问其内容。备忘录模式简化了状态管理,支持撤销操作和历史记录功能,提高了系统的灵活性和可用性。在实际应用中,备忘录模式常用于文本编辑器、游戏和数据库事务处理等场景,确保对象状态的安全恢复和有效管理。通过备忘录模式,开发人员可以更好地控制对象状态的变化,提升软件系统的健壮性和用户体验。
129 1
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道