这篇文章主要讲解了“C语言责任链模式代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言责任链模式代码怎么写”吧!
责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者;
责任链模式
将请求按照链的方式一一传递
公司申请报销,首先要leader审批通过,然后是HR,再然后是财务,最后是老板,一级一级的将请求传递;
#include<stdio.h>#include<assert.h>#include"list.h"staticLIST_HEAD(chain_head);enum{PASS,REFUSE,};typedefstruct{intmoney;char*files;}info_t;typedefint(*request_handle)(info_t*info);typedefstruct{request_handlefunc;ListObjlist;}chain_node_t;intleader(info_t*info){assert(info!=NULL);if(info->money<1000)//金额小于1000就行{returnPASS;}returnREFUSE;}inthr(info_t*info){assert(info!=NULL);if(info->money<2000&&info->files!=NULL)//金额小于2000且材料齐全{returnPASS;}returnREFUSE;}intboss(info_t*info){assert(info!=NULL);if(info->files!=NULL)//材料齐全就行,不差钱{returnPASS;}returnREFUSE;}//审批流程:leader->hr->bosschain_node_treq_table[]={{.func=leader},{.func=hr},{.func=boss}};voidmain(void){/*将审批节点添加到责任链上*/for(inti=0;i<sizeof(req_table)/sizeof(req_table[0]);i++){list_insert_before(&chain_head,&(req_table[i].list));}/*报销内容*/info_tinfo={.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语言责任链模式代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
C/C++如何获取CAN信号
C语言怎么通过二分查找实现猜数字游戏
C语言数据结构中的线性表怎么使用
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
C语言与C++中内存管理的方法
C语言链式队列与循环队列怎么实现
C语言冒泡排序怎么实现
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
C语言如何实现无符号数和有符号数间的运算
C语言中常用的头文件是什么
C语言中常用的头文件是什么这篇文章主要介绍“C语言中常用的头文件是...
用户名
密码
记住登录状态 忘记密码?
邮箱
确认密码
我已阅读并同意 用户协议