面向接口编程
话不多说,先上一个面向接口编程的Demo:
参考demo:
1#include 2#include 34/********************************************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};1415 /********************************************16 * Note: 具体类型的定义 17 * author:bug菌 18 *******************************************/19typedef struct _tag_protocolType1 {20 struct Interface bi; //公共通信接口 21 char* CommTypeName; //通信名称 22 //不同通信类型的其他成员...... 23}protocolType1;242526/********************************************27 * Note:其中一种报文协议的简单接口实现 28 * author:bug菌 29 *******************************************/30void protocol_Initial(void* handle)31{32 protocolType1* p = ( protocolType1*)handle;33 p->CommTypeName = "protocolType1"; //可以通过公共接口传参访问原对象的所有成员 3435 printf("%s Initial\n",p->CommTypeName);36} 3738void protocol_Send(void* handle,char * buff,int count)39{40 protocolType1* p = ( protocolType1*)handle;4142 printf("%s Send\n",p->CommTypeName);43} 4445void protocol_Recv(void* handle,char * buff)46{47 protocolType1* p = (protocolType1*)handle;4849 printf("%s Recv\n",p->CommTypeName);50} 5152void protocol_Destory(void* handle)53{54 protocolType1* p = (protocolType1*)handle;5556 printf("%s Destory\n",p->CommTypeName);57} 5859/********************************************60 * Note : 根据不同的类型,进行接口的初始化 61 * author : bug菌 62 *******************************************/63void Initial(struct Interface *pInterface,int type)64{65 pInterface->Initial = protocol_Initial;6667 pInterface->Send = protocol_Send;6869 pInterface->Recv = protocol_Recv;7071 pInterface->Destory = protocol_Destory;7273}7475/********************************************76 * Note :主题框架基本上不需要修改,这里只是简单示例,你可以更复杂 77 * author : bug菌 78 *******************************************/79void Process(struct Interface *pInterface)80{81 pInterface->Initial(pInterface);8283 pInterface->Send(pInterface,NULL,0);8485 pInterface->Recv(pInterface,NULL);8687 pInterface->Destory(pInterface);8889}909192/********************************************93 * Note :应用程序 94 * author : bug菌 95 *******************************************/96int main(int argc, char *argv[]) {9798 protocolType1 protocol;99
100 Initial((struct Interface*)&protocol,1);
101
102 Process((struct Interface*)&protocol);
103
104 return 0;
105}
运行结果:
分析一下:
对于一名合格的程序员,代码show出来,本文就没有写下去的必要了,不过为了全文的整体性,还是啰嗦几句。
其实面向接口编程所采用就是面向对象编程中的继承,只不过它把所有的公共接口全部抽象出来供框架程序进行调用。
这样当我们需要增加其他类型的对象处理时,可以通过构造并替换不同的接口函数来进行处理,从而使得整体程序改动最小。
凡是一种复用的架构都会牺牲一定的性能,不过也会增加程序的可维护性,降低程序的耦合度,如果你开发的项目并不是很复杂, 也确定了以后接口不会有新的变化,其实不使用接口也是OK的。
对于自动测试程序框架,接口的预留是非常重要的,可以通过虚拟接口来测试业务逻辑,能够模拟更多实际环境下不同的工况来进行测试。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。