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{

推薦閱讀