zoukankan      html  css  js  c++  java
  • 工程化编程实战callback接口学习笔记

    工程化编程实战callback接口学习笔记

    1.实验环境

    • vscode+Remote-ssh插件

      使用vscode远程登录Linux虚拟机开发

    • xshell

      方便将windows主机中的文件传输到虚拟机中,本次实验室将实验代码传输到虚拟机中

    • Ubuntu虚拟机

    2.实验步骤

    • 配置Remote-ssh

      • 配置远程主机ip和端口号

      • 配置公钥登录

        具体步骤可以参考此博客

    • 安装windows上的ssh服务

      设置->应用与功能->管理可选功能,点击添加ssh即可

    • 通过Remote-ssh登录到Linux

    • 测试代码

      • 由于在实际代码的执行过程中会出错,在代码中添加

        include "string.h"
        
      • 在终端下使用命令

        gcc -o menu linktable.c menu.c
        
      • 运行可执行文件

        分别测试help命令和quit命令,发现quit命令报错,结果如下:

    • 结果分析

      检查代码后发现,在主函数中,命令行接受命令后会去调用FindCmd函数,根据返回值结果来进行输出:

      我们继续检查这个FindCmd函数,看看其内部到底在干些什么事情.检查代码后发现,FindCmd函数内部只是调用了另外一个函数SearchLinkTableNode,它啥也没干:

      于是我们进入到SearchLinkTableNode函数内部,看看他的工作有哪些:

    这段代码很明显是在遍历一个链表,可以很明显的看到边界代码逻辑中的一个缺陷:并没有遍历链表的最后一个节点.而最后一个节点正好是保存一个退出信息的.在InitMenuData函数中可以看到整个链表的结构以及每个节点保存的内容:

    整个链表就这三个节点,分别对应着help命令,version命令以及quit命令:

    分析完成!

    接下来我们将代码中的逻辑错误部分进行更正:

    tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode))
    {
        if(pLinkTable == NULL || Conditon == NULL)
        {
            return NULL;
        }
        tLinkTableNode * pNode = pLinkTable->pHead;
        while(pNode != NULL)
        {    
            if(Conditon(pNode) == SUCCESS)
            {
                return pNode;				    
            }
            pNode = pNode->pNext;
        }
        return NULL;
    }
    

    重新编译,并执行,结果如下:

    大功告成!

    3.callback接口的设计方法

    • 为什么要使用callback
      • 回调函数可以使得接口更加通用,在本节中callback函数使得Linktable查询接口更加通用
      • 可以降低软件模块与模块之间的耦合度
      • callback函数可以提高用户的实际体验
      • 让代码的逻辑更加集中,易读性高
    • 如何实现一个接口回调(以java为例)
      • 接口类
        创建接口,添加接口的实现方法
      • 功能类
        声明接口对象;设置监听;添加调用接口的方法
      • 实现类
        创建功能类对象;调动功能类里的实例化接口的方法;调用功能类的调用接口的方法
  • 相关阅读:
    几种开源SIP协议栈对比OPAL,VOCAL,sipX,ReSIProcate,oSIP
    google开源的C++性能分析工具
    常用SNS开源系统比较
    推荐20个开源项目托管网站
    web2.0的几个开源项目
    开源src镜像
    Niagara解决设备连接应用的软件框架平台技术。
    Signing key has not been configured
    Mybatis 简单的CRUD 基于XML文件配置
    HDU4451Dressing(计数)
  • 原文地址:https://www.cnblogs.com/sa19225475/p/12520970.html
Copyright © 2011-2022 走看看