当前位置: 首页 > 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
  • 印度扩大对巴措施:封锁巴基斯坦名人账号、热门影像平台
  • 体坛联播|拜仁遭绝平未能提前夺冠,刘翔钻石联赛纪录作古
  • 五一假期前两日,多地党政主官暗访景点、商圈安全工作
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列
  • 王毅谈金砖国家开展斡旋调解的经验和独特优势
  • 中行一季度净赚超543亿降2.9%,利息净收入降逾4%