面向接口编程

话不多说,先上一个面向接口编程的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的。

对于自动测试程序框架,接口的预留是非常重要的,可以通过虚拟接口来测试业务逻辑,能够模拟更多实际环境下不同的工况来进行测试。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C语言实现面向接口编程相关推荐

  1. C语言面向对象编程(四):面向接口编程

    Java 中有 interface 关键字,C++ 中有抽象类或纯虚类可以与 interface 比拟,C 语言中也可以实现类似的特性. 在面试 Java 程序员时我经常问的一个问题是:接口和抽象类有 ...

  2. python面向接口编程_Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  3. python 接口编程_Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  4. 软件设计模式—面向接口编程

    原文作者:laoer2009 原文地址:设计模式之面向接口编程 01第一次需求 玩家有很多属性,例如:身高,性别 blalalala ,玩家可以攻击其他玩家.产品狗YY妹子写程序也是很利索,一天就把程 ...

  5. java继续_Java中消除实现继续和面向接口编程

    在匆忙之际理清消除实现继续和面向接口编程这样两个大题目可不是一件轻易的事情,尤其考虑到自身的熟悉水平.坦白的说,这又是一篇"炒冷饭"的文章,但这"冷饭"又确实不 ...

  6. python接口编程_Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  7. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰--依赖倒置•控制反转•依赖注入•面向接口编程.也 ...

  8. 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    作者:在好 链接:https://www.zhihu.com/question/31021366/answer/102239756 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  9. 面向接口编程VS《倚天屠龙记》里张三丰教无忌打太极

    搞笑哈,只细想想,编程和太极怎么能联系在一起了,是八秆子也打不着的哈! 昨天看了一篇文章是关于面向接口编程的文章,颇有心得,其实在今天中国IT软件行业的盛行,程序员们突飞猛涨,真正算的上程序员的又有几 ...

最新文章

  1. java接口 密钥签名作用_api接口签名加密请求(二)
  2. QIIME 2用户文档. 21图形界面q2studio(2019.7)
  3. 是凡尔赛本赛了,马斯克回应成为全球首富
  4. 我知道今天是写总结的日子-所以买了一罐啤酒喝
  5. 算法---------搜索旋转排序数组
  6. mxnet根据相似度进行人脸样本对图片清理
  7. C#字符串格式化说明(String.Format) (zz.IS2120)
  8. linux+proc+原理,Linux内核中的Proc文件系统(一)
  9. BetterZip结合自动操作工具和预设设置创建电影解压程序
  10. redis入门——客户端篇
  11. 互联网和大数据是什么意思_大数据和互联网的区别是什么意思
  12. 软件工程期末考试题库(超全)
  13. tomcat10.0安装及配置教程(win10)
  14. FL studio 20简易入门教程 -- 第八篇 -- 技巧合集
  15. winpe修复改linux工具,巧用WinPE修复故障系统的解决方法
  16. AI时代大点兵-国内外知名AI公司2018年最新盘点
  17. 单细胞多组学联合应用
  18. 两万字博文教你python爬虫requests库【详解篇】
  19. Windows 10快速截图快捷键 (Windows徽标键+shift+S)
  20. Dao接口返回数组_在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?...

热门文章

  1. nodemanager_如何使用NodeManager来控制WebLogic Server
  2. cargo maven_与Maven 3,Failsafe和Cargo插件的集成测试
  3. 正确的工作流程:我应该使用哪个OAuth 2.0流程?
  4. guava读取配置文件_使用Guava MapSplitters配置Hadoop
  5. 控制Java并行流的并行度
  6. java ee cdi_Java EE CDI Producer方法教程
  7. javacv 人脸检测_使用JavaCV进行手和手指检测
  8. 在单元测试和TDD中指定时间的重要性
  9. 什么是JAX-RS注释? (第2部分)
  10. java 代码冲突检测_Java中常见的代码冲突