我用过的设计模式(9)-- 备忘录模式
2023-09-14 09:15:26 时间
如果能重来
“如果能重来,我要选李白···”,“曾经有一份····”,“多渴望能够 找到一条时光隧道,重回到简单,容易觉得美好”,“我靠,我被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();
}
应用场景
你懂得。
相关文章
- 工具推荐|ESMValTool地球系统模式评估工具
- 23种设计模式之装饰者模式
- JavaScript 设计模式 —— 发布订阅模式
- JS设计模式之备忘录模式
- 【玩烂设计模式】设计模式之策略模式
- BSC链智能合约质押挖矿模式系统开发
- Go学设计模式--原型模式的考查点和使用推荐
- 一起学习设计模式--03.工厂方法模式
- 一起学习设计模式--06.建造者模式
- 一起学习设计模式--08.桥接模式
- 结构型模式--设计模式详解?
- Go学设计模式--怕把核心代码改乱,记得用代理模式
- 【设计模式】享元模式 实现 ( 实现流程 | 抽象享元类 | 具体享元类 | 享元工厂 | 用户调用 | 代码模板 )
- 大前端时代|移动应用动态研发模式及原理机制解析
- OpenServer是一款超轻量、超迷你、Actor模式、组件设计的高性能、高并发的跨全平台服务器框架
- php设计模式(七):原型模式(Prototype)
- 建造者模式 生成器模式 创建型 设计模式(五)详解程序员
- java设计模式之命令模式详解架构师
- 设计模式之职责链模式(行为型)详解架构师
- 设计模式:工厂方法模式详解架构师
- 构建一个即时消息应用(一):模式
- eshiLinux重定向测试:解锁更高效的工作模式(linux 重定向 c)
- 腾讯云助力,大数据梦想掌控Redis模式(腾讯云redis模式)
- Oracle仓库模式实现数据仓库高性能的新办法(oracle仓库模式)
- php设计模式之单例模式
- php设计模式Command(命令模式)
- 关于.NETFramework中的设计模式--应用策略模式为List排序
- PHP运行模式的深入理解
- PHP实现设计模式中的抽象工厂模式详解
- JavaScript设计模式之原型模式(Object.create与prototype)介绍