当前位置: 首页 > 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;
   

http://www.dtcms.com/a/155415.html

相关文章:

  • 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
  • ISCTF2024-misc(部分)
  • LSPatch官方版:无Root Xposed框架,自由定制手机体验
  • 动态ip与静态ip的概念、区别、应用场景
  • 神经网络基础[损失函数,bp算法,梯度下降算法 ]
  • SpringBoot集成LiteFlow实现轻量级工作流引擎
  • 国内多层PCB供应商优选指南
  • 住宅IP如何选择:长效VS短效,哪个更适合你的业务?
  • ctfshow web入门 命令执行(29-77)
  • Linux 中的文件锁定命令:flock、fcntl、lockfile、flockfile 详细教程
  • ubiquant比赛系列——用docker准备ubipoker开发环境