当前位置: 首页 > news >正文

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;
   

相关文章:

  • linux安装单节点Elasticsearch(es),安装可视化工具kibana
  • 汽车行业EDI教程——北美X12标准 需求分析及方案
  • 通过模仿学习实现机器人灵巧操作:综述(下)
  • 1.9软考系统架构设计师:优秀架构设计师 - 超简记忆要点、知识体系全解、考点深度解析、真题训练附答案及解析
  • springboot启动的端口如何终止
  • pyqt中以鼠标所在位置为锚点缩放图片
  • 初识Redis · 哨兵机制
  • Hbase集群管理与实践
  • lumen中使用JWT下getTTL令牌过期源码解析(AI)
  • 基于Docker的Flask项目部署完整指南
  • Bytebase 3.5.1 - 扩展了对数据库的连接参数支持
  • 纯HTMLCSS静态网站——元神
  • 操作指南:vLLM 部署开源大语言模型(LLM)
  • Kafka与Spark-Streaming:大数据处理的黄金搭档
  • [mysql]数据类型精讲
  • 【MySQL】MySQL索引与事务
  • STUN协议 与 TURN协议
  • 广州 3D 展厅开启企业展示新时代​
  • 运维之SSD硬盘(SSD hard Drive for Operation and Maintenance)
  • http://noi.openjudge.cn/——2.5基本算法之搜索——200:Solitaire
  • 伊朗公布新型弹道导弹,“萨德”系统无法拦截
  • 《开始推理吧3》:演员没包袱,推理更共情
  • 马上评|“景区陪爬”能成为新职业吗?
  • 解放日报头版:上海张江模力社区托举“年轻的事业”
  • 抗战回望15︱《五月国耻纪念专号》:“不堪回首”
  • 下达专项资金、党政主官田间调研……全国多地力保夏粮稳收