有哪些设计模式?c语言如何实现这些设计模式?
《C现代编程》读书笔记

模板方法模式

管理资源(文件或者内存)是一件很麻烦的事情,因为分配资源后还必须释放资源,如fopen和fclose需要对应,malloc和free需要对应。因此处理资源的代码总是显得非常繁杂。

如果函数在处理到一半的时候,返回了,而不去释放文件或内存,让文件或者内存一直处于打开状态,就会出现问题。但是如果加入的话,又容易出现代码混乱。

方法:将程序中的部分处理作为可以被替换的函数,将其他处理作为固定处理,使其可以重复利用,这里资源的分配和释放处理是固定处理,而获取文件中数值范围的处理则是可以被替换的处理。

优点:

首先, 文件的打开和关闭等操作都集中在 read_file函数中。也就是说只能在其中分配和释放资源。通常情况下,最好尽量将分配和释放资源的处理放在一起,否则很容易忘记。另外 , 该结构将文件处理分离到 processor函数中。 这样一来. 各函数的职责更加清晰明确 。也可以避免中途退出循环时发生的问题。

升级1:返回非int值

C语言中多用void或者联合体解决问题

这里可以使用一个结构体,需要什么返回值,就增加一个什么样的结构体。

typedef struct FileReaderContext {
const char *const pFname;
void(*const processor)(struct FileReaderContext *pThis, FILE *p);
}FileReaderContext;

typedef struct {
FileReaderContext base;
int result;
}MyFileReaderContext;

升级二:处理其他资源

实现将一个文件中的数据读取到内存中,进行排序后,再输出给另一个文件的功能。

将最常用的写成模板,而不是将整体写成模板。

处理文件+处理内存

源码:https://github.com/xiaoqinxing/myrepo_c