这篇文章主要讲解了“C语言责任链模式代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言责任链模式代码怎么写”吧!
介绍:
责任链模式
是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者;
作用:
将请求按照链的方式一一传递
类比:
公司申请报销,首先要leader审批通过,然后是HR,再然后是财务,最后是老板,一级一级的将请求传递;
示例:
#include <stdio.h>#include <assert.h>#include "list.h"static LIST_HEAD(chain_head);enum{ PASS, REFUSE,};typedef struct{ int money; char* files;} info_t;typedef int (*request_handle)(info_t* info);typedef struct{ request_handle func; ListObj list;}chain_node_t;int leader(info_t* info){ assert(info != NULL); if(info->money < 1000) //金额小于1000就行 { return PASS; } return REFUSE;}int hr(info_t* info){ assert(info != NULL); if(info->money < 2000 && info->files != NULL) //金额小于2000且材料齐全 { return PASS; } return REFUSE;}int boss(info_t* info){ assert(info != NULL); if(info->files != NULL) //材料齐全就行,不差钱 { return PASS; } return REFUSE;}//审批流程: leader->hr->bosschain_node_t req_table[] = { {.func = leader}, {.func = hr}, {.func = boss} };void main(void){ for(int i = 0; i < sizeof(req_table) / sizeof(req_table[0]); i++) { list_insert_before(&chain_head, &(req_table[i].list)); } info_t info = {.money = 900, .files = "files"}; ListObj *node; list_for_each(node, &chain_head) { chain_node_t* req = list_entry(node, chain_node_t, list); if(req->func(&info) != PASS) { printf("Failed\r\n"); return; } } printf("Success\r\n"); return;}
感谢各位的阅读,以上就是“C语言责任链模式代码怎么写”的内容了,经过本文的学习后,相信大家对C语言责任链模式代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!