常用于单片机的接口适配器模式C语言实现
前言
通俗的讲,适配器模式是将一个类的接口转换成客户希望的另外一个接口,在我们编写程序的时候,尤其是在我们使用到单片机做项目的时候,经常会用到。
但是往往我们做项目写程序的时候,并没有想到那么多,如果在不带操作系统的情况下,想要整个框架易于移植,易于理解,那么我们真的需要好好想想这个设计模式怎么写了。
下面我根据自己的项目经验,来说说适用于单片机的接口适配器模式的实现。大佬勿扰,多多指教。
一般实现
在我们做项目的时候,一般的实现,可能我们会这样写代码
// FileName: test.c
// 来源:公众号【技术让梦想更伟大】
#include <stdio.h>
#include “ExternModule.h”
int main(void)
{
/*初始化*/
vAllInit();
while(1)
{
/*项目逻辑*/
vLogicModule1();
vLogicModule2();
}
}
在其外部文件中,调用相对应的初始化函数以及逻辑函数,但是当我们项目很复杂的时候,逻辑关系也层层覆盖、交替的时候,这样的写法就有些不是很好看了。
接口适配器
首先我们还是要来定义数据结构,一般这样的项目分为这样几个步骤:
初始化 输入 处理 输出
我们把这四个步骤封装起来,再定义数据结构如下:
// FileName: test1.c
// 来源:公众号【技术让梦想更伟大】
/* 适配器类型定义 */
struct _ADAPTER
{
void (*Init )( void ); //初始化函数
void (*Input )( void ); //输入转换函数
void (*Process )( void ); //处理函数
void (*Output )( void ); //输出转换函数
};
typedef struct _ADAPTER ADAPTER ;
那么初始化函数,我们先来这样定义
// FileName: test1.c
// 来源:公众号【技术让梦想更伟大】
/* 模块初始化 */
void moduleInit( ADAPTER *module )
{
if( module->Init != NULL )
{
module->Init();
}
}
模块的逻辑运行,我们可以这样使用
// FileName: test1.c
// FileName: test1.c
// 来源:公众号【技术让梦想更伟大】
/* 模块逻辑运行 */
void moduleRun( ADAPTER *module )
{
// 模块输入适配接口不为空,则执行输入适配操作
if( module->Input != NULL )
{
module->Input();
}
// 模块处理接口不为空,则执行处理操作
// 模块输出适配接口不为空,则执行输出适配操作
}
赞 (0)