工程化编程实战callback接口学习笔记 SA19225507 周光印
程序需要把多线程的库注释掉 ,这个库WINDOWS 平台没有带,并且需要加上<string.h>
首先编译程序运行

程序的功能及流程
typedef struct DataNode
{
tLinkTableNode * pNext;
char* cmd;
char* desc;
int (*handler)();
} tDataNode;
这个数据结构是本程序的核心,本程序的主要功能是在程序初试化的时候创建一系列命令的节点通过链表链接起来,当用户输入命令的时候,通过搜索相应的链表找到和节点中值相等的的节点,调用节点中的处理函数,通过链表存储节点,节点的功能是绑定命令和对应的处理函数,当用户输入命名,搜索链表就能找到处理函数,这样很方便动态添加命令和以及响应命令的的处理函数,
回调函数在本程序中的应用
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;
}
本函数中带一个函数指针,这个函数指针表示搜索条件,由用户指定,链表这个类遍历整个链表,依次把节点传入回调函数中 ,如果返回值为真则返回该节点,否则继续遍历。这样做的好处有很多1把链表类和使用链表者解耦合,链表专注于它自己的功能,添加删除,搜索,用户专注于自己的逻辑代码,实现的软件工程中高内聚低耦合的原则,方便修改和增加功能,链表的功能也更加强大,用户可以自定义搜索条件,链表类不用暴露自己的过多信息。
BUG 以及解决
当程序输入quit 命令的时候程序返回错误命令,
原因分析


修改过后的运行结果

回调函数的机制以及接口的设计方法
函数作为搜索函数的参数,可以配置这样函数可以专注于自己的功能,做好可以灵活配置,用户传递自定义的函数,当做参数传入到接口中,定义接口的时候可以提前调用次函数,调用作为参数的函数,来实现本函数所需要实现的功能,这样符合设计模式的开闭原则,单一职责原来,高内聚低耦合,非常好用
浙公网安备 33010602011771号