作业3:深入理解Callback函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

参考《代码中的软件工程》第六章可复用软件设计及lab5.2的源代码,完成实验并写一篇实验报告,总结Callback函数的工作机制以及通过参数进行解耦合的方法,深入理解接口设计中的抽象分层。


一、回调函数是什么?

把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果在之后晚点的某个时间再执行,则称之为异步回调。

二、lab5.2的文件结构

1.数据结构定义为linktableInternal.h文件。
2.接口定义包括linktable.h与linktable.c文件。
3.主函数调用文件为menu.c文件,实现最终功能。

三、通过menu的代码分析

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

SearchLinkTableNode函数是callin函数,而Condition函数是callin函数的参数,Condition函数就是callback函数。

int InitMenuData(tLinkTable ** ppLinktable)

int SearchCondition(tLinkTableNode *pLinkTableNode, void *args)
{
    char * cmd = (char*) args;
    tDataNode * pNode = (tDataNode *)pLinkTableNode;
    if (strcmp(pNode->cmd, cmd) == 0)
    {
        return SUCCESS;
    }
    return FAILURE;
}

/* find a cmd in the linklist and return the datanode pointer */
tDataNode* FindCmd(tLinkTable * head, char * cmd)
{
    return (tDataNode *)SearchLinkTableNode(head, SearchCondition, (void *)cmd);
}

SearchCondition函数定义了查询条件。FindCmd函数的目标是找到一个对应的cmd并返回节点指针。
在callin函数和callback函数增加参数args的原因是尽可能追求松散耦合。
综上,Callback函数完成了解耦功能,提高了接口的通用性

四、公共耦合和标记耦合

若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
如果一组模块通过数据结构本身传递,则称这种耦合为标记耦合。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了callback的使用。

作者:378

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值