C语言实现面向接口编程 菜鸟教程c语言接口怎么用

【C语言实现面向接口编程 菜鸟教程c语言接口怎么用】今天更新的文章,我相信是大伙喜欢的,来聊聊面向接口编程 。
不是一直都吹嘘着面向对象编程吗?怎么今天又来一个面向接口编程,很多人要说我不讲武德了 。
1
面向接口是啥?
不用慌,其实面向接口编程不是什么新鲜玩意,说得直白点就是函数指针的使用,不过我觉得可以形成一种编程的思想来指导嵌入式程序设计,特别是对于降低代码的耦合还是比较奏效的 。
面向接口编程比面向对象要更牛吗?为什么不直接玩面向对象编程呢?
其实bug菌这么多年开发过来,真正把C完完全全用面向对象的方式进行编写是非常少的,像C++中的继承、多态、虚函数等等面向对象特性,如果均用C语言来维护和实现是非常复杂的,并且你还不能保证没有bug 。
再说了你写了一堆代码让C的特性更加的像C++,那为什么不直接使用C++呢?难道你觉得那些特性你能用C写得比C++更好?别重复造轮子了 。
不过,话说回来,能够在C语言中借鉴一些面向对象的语言特性和思想,确实能够让C代码更加的优雅和灵活,所以今天聊聊面向接口编程,它仅仅只是面向对象的一部分,不过在一般的嵌入式开发中使用性价比还是比较高的 。
2
面向接口编程
话不多说,先上一个面向接口编程的Demo:

参考demo:
1#include
2#include
3
4/********************************************
5 * Note: 共用接口的定义
6 * author:bug菌
7 *******************************************/
8struct Interface {
9 int (*Initial)(void* handle);
10 int (*Send)(void* handle,char * buff,int count);
11 int (*Recv)(void* handle,char * buff);
12 int (*Destory)(void* handle);
13};
14
15 /********************************************
16 * Note: 具体类型的定义
17 * author:bug菌
18 *******************************************/
19typedef struct _tag_protocolType1 {
20 struct Interface bi; //公共通信接口
21 char* CommTypeName; //通信名称
22 //不同通信类型的其他成员……
23}protocolType1;
24
25
26/********************************************
27 * Note:其中一种报文协议的简单接口实现
28 * author:bug菌
29 *******************************************/
30void protocol_Initial(void* handle)
31{
32 protocolType1* p = ( protocolType1*)handle;
33 p->CommTypeName = \”protocolType1\”; //可以通过公共接口传参访问原对象的所有成员
34
35 printf(\”%s Initial\\n\”,p->CommTypeName);
36}
37
38void protocol_Send(void* handle,char * buff,int count)
39{
40 protocolType1* p = ( protocolType1*)handle;
41
42 printf(\”%s Send\\n\”,p->CommTypeName);
43}
44
45void protocol_Recv(void* handle,char * buff)
46{
47 protocolType1* p = (protocolType1*)handle;
48
49 printf(\”%s Recv\\n\”,p->CommTypeName);
50}
51
52void protocol_Destory(void* handle)
53{
54 protocolType1* p = (protocolType1*)handle;
55
56 printf(\”%s Destory\\n\”,p->CommTypeName);
57}
58
59/********************************************
60 * Note : 根据不同的类型,进行接口的初始化
61 * author : bug菌
62 *******************************************/
63void Initial(struct Interface *pInterface,int type)
64{
65 pInterface->Initial = protocol_Initial;
66
67 pInterface->Send = protocol_Send;
68
69 pInterface->Recv = protocol_Recv;
70
71 pInterface->Destory = protocol_Destory;
72
73}
74
75/********************************************
76 * Note :主题框架基本上不需要修改,这里只是简单示例,你可以更复杂
77 * author : bug菌
78 *******************************************/
79void Process(struct Interface *pInterface)
80{

推荐阅读