C 语言中实现依赖反转(Dependency Inversion Principle,DIP)
1. 定义抽象接口
定义一个抽象的日志接口,高层模块通过该接口操作日志,而非直接依赖具体实现。
// Logger.h - 抽象接口定义
#ifndef LOGGER_H
#define LOGGER_H
// 日志级别枚举
typedef enum {
LOG_INFO,
LOG_ERROR
} LogLevel;
// 抽象日志接口结构体
typedef struct {
void (*log)(void* self, LogLevel level, const char* message);
void (*destroy)(void* self); // 销毁接口的虚函数
} ILogger;
#endif
2. 实现具体日志模块
2.1 控制台日志实现
// ConsoleLogger.c - 控制台日志实现
#include <stdio.h>
#include "Logger.h"
// 控制台日志的私有数据
typedef struct {
ILogger interface; // 必须包含接口结构体
int instanceId; // 示例私有成员
} ConsoleLogger;
// 实现日志方法
static void ConsoleLog(void* self, LogLevel level, const char* message) {
ConsoleLogger* logger = (ConsoleLogger*)self;