大家好,今天给大家介绍C语言:备忘录模式,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。
备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式是一种“后悔药”机制,允许用户恢复到某一特定历史步骤,从而能够比较方便地回到某个历史状态。在C语言中实现备忘录模式需要手动管理对象的状态和恢复逻辑,因为C语言本身不支持面向对象编程中的高级特性,如对象、继承、多态等。
不过,我们可以通过结构体和函数指针来模拟面向对象编程中的类和对象行为,以此来实现备忘录模式。
下面是一个简单的C语言实现备忘录模式的例子:
1. 定义备忘录结构体
首先,定义一个结构体来存储需要被备忘录捕获的状态。
#include <stdio.h>
#include <stdlib.h>
// 备忘录结构体
typedef struct {
int state; // 假设我们只需要记录一个整型状态
} Memento;
// 创建备忘录
Memento* createMemento(int state) {
Memento* memento = (Memento*)malloc(sizeof(Memento));
if (memento != NULL) {
memento->state = state;
}
return memento;
}
// 销毁备忘录
void freeMemento(Memento* memento) {
if (memento != NULL) {
free(memento);
}
}
2. 定义原发器(Originator)
原发器是包含需要被保存和恢复状态的对象。
// 原发器结构体
typedef struct {
int currentState; // 当前状态
// 创建备忘录
Memento* createMemento() {
return createMemento(currentState);
}
// 设置状态
void setState(int state) {
currentState = state;
}
// 从备忘录恢复状态
void restoreMemento(Memento* memento) {
if (memento != NULL) {
currentState = memento->state;
}
}
// 显示状态
void showState() {
printf("Current State: %d\n", currentState);
}
} Originator;
// 创建原发器
Originator* createOriginator() {
return (Originator*)malloc(sizeof(Originator));
}
// 销毁原发器
void freeOriginator(Originator* originator) {
if (originator != NULL) {
free(originator);
}
}
3. 使用备忘录模式
int main() {
Originator* originator = createOriginator();
// 设置初始状态
originator->setState(10);
originator->showState(); // 显示:Current State: 10
// 创建备忘录
Memento* memento = originator->createMemento();
// 修改状态
originator->setState(20);
originator->showState(); // 显示:Current State: 20
// 从备忘录恢复状态
originator->restoreMemento(memento);
originator->showState(); // 显示:Current State: 10
// 清理资源
freeMemento(memento);
freeOriginator(originator);
return 0;
}
在这个例子中,我们通过结构体和函数模拟了面向对象编程中的类和对象,实现了备忘录模式的基本功能。这种方式虽然不是C语言原生支持的,但它展示了C语言在解决复杂问题时的灵活性和能力。
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!
点击找小助理免费领取资料
扫码进群领资料https://ad.pdb2.com/l/16QijNiGb32IFIn