首页 > 作文

C语言责任链模式示例代码

更新时间:2023-04-04 10:32:49 阅读: 评论:0

目录
介绍:作用:类比:示体育竞技精神例:总结

介绍:

责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者;

作用:

将请求按照链的方式一一传递

类比:

​ 公司申请报销,首先要leader审批通过,然后是hr,再然后是财务,最后是老板,一级一级的将请求传递;

示例:

#include <stdio.h>#include <asrt.h>#include "list.h"stat中专想升大专ic list_head(chain_head);enum{    pass,    refu,};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){    asrt(info != null);    if(info->money < 1000) //金额小于1000就行    {        return pass;    }    return refu;}int hr(info_t* info){诗朗诵伴奏    asrt(inf神奇塔罗牌占卜o != null);    if(info->money < 2000 && info->files != null) //金额小于2000且材料齐全    {        return pass;    }    return refu;}int boss(info_t* info){    asrt(info != null);    if(info->files != null) //材料齐全就行,不差钱    {        return pass;    }    return refu;}//审批流程: 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_inrt_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语言责任链内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 10:32:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/18f4c563ac2f0c149c056e2fa0af6c3f.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C语言责任链模式示例代码.doc

本文 PDF 下载地址:C语言责任链模式示例代码.pdf

标签:责任   就行   模式   示例
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图