iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言责任链模式示例代码
  • 296
分享到

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

2024-04-02 19:04:59 296人浏览 八月长安
摘要

目录介绍:作用:类比:示例:总结介绍: ​ 责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处

介绍:

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

在这里插入图片描述

作用:

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

类比:

​ 公司申请报销,首先要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->boss
chain_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语言责任链内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言责任链模式示例代码

本文链接: https://www.lsjlt.com/news/161699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言责任链模式示例代码
    目录介绍:作用:类比:示例:总结介绍: ​ 责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处...
    99+
    2022-11-12
  • C语言责任链模式代码怎么写
    这篇文章主要讲解了“C语言责任链模式代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言责任链模式代码怎么写”吧!介绍:责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行...
    99+
    2023-06-22
  • Java责任链模式实例代码分析
    本文小编为大家详细介绍“Java责任链模式实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java责任链模式实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。优点降低耦合度。它将请求的发送者和...
    99+
    2023-06-29
  • Python的组合模式与责任链模式编程示例
    组合模式 我们把Composite模式看成一个复杂的属性结构,其实基本有三种角色:树干(定义一些操作树叶leaf的操作),树枝(树干上有很多树枝)和树叶(树干想要具体操作的对象) ,Composite模式帮...
    99+
    2022-06-04
    模式 组合 示例
  • Java设计模式之责任链模式的示例详解
    目录应用场景实际代码案例无模式情况下的代码采用责任链模式优化代码采用建造者+责任链模式优化代码责任链模式优缺点责任链模式是将链中的每一个节点看做是一个对象,每个节点处理的请求均不相同...
    99+
    2022-11-13
    Java 设计模式 责任链模式 Java 责任链模式
  • JavaScript设计模式之责任链模式的的示例分析
    这篇文章主要介绍了JavaScript设计模式之责任链模式的的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例讲述了JavaS...
    99+
    2022-10-19
  • Python使用设计模式中的责任链模式与迭代器模式的示例
    责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。 #encoding=utf-8 # #by pan...
    99+
    2022-06-04
    模式 示例 迭代
  • C语言实现动态链表的示例代码
    目录结构体定义已经函数声明函数实现创建一个链表判断链表是否为空获得链表中节点的个数在某个特定的位置插入一个元素获得指定下标的节点的元素删除一个节点链表逆序链表的清空链表的销毁链表的遍...
    99+
    2022-11-13
  • C语言模拟实现memmove的示例代码
    目录前言例子memmove的模拟实现具体实现步骤总结前言 上一篇我们介绍了memcpy和strcpy的区别,以及memcpy模拟实现,但这两个库函数都有一个缺点,那就是不能自己复制自...
    99+
    2022-12-29
    C语言实现memmove C语言 memmove
  • 利用C语言实现任务调度的示例代码
    目录前言任务调度模式结构分片轮询调度实现结语前言 这个任务调度模块的实现是形成于毕设项目中的,用在STM32中,断断续续跨度2个月实现了一些基本功能,可能后面再做其他项目时会一点点完...
    99+
    2023-05-15
    C语言实现任务调度 C语言任务调度
  • C语言实现无头单向链表的示例代码
    目录一、易错的接口实现 1.1 新节点开辟函数 1.2 尾插 1.3 尾删 二、常见简单接口 2.1 打印链表 2.2 节点计数器 2.3 判断是否为空链表 2.4 通过值查找节点 ...
    99+
    2022-11-12
  • C语言带头双向循环链表的示例代码
    目录前言结构分析链表的基本操作实现创建节点初始化链表链表销毁打印链表链表尾插链表尾删链表头插链表头删链表查找链表pos位置前面去插入删除pos位置链表判空代码复用总代码及头文件前言 ...
    99+
    2022-11-13
    C语言带头双向循环链表 C语言 双向循环链表 C语言 循环链表
  • C语言模拟实现密码输入的示例代码
    目录引言思路分析代码实现代码分析引言 登录账号时我们要输入密码,密码输入错误时会提示密码错误。有时密码的输入次数会被限制,例如银行卡,当我们3次密码都输入错误时卡会被冻结。下面用C语...
    99+
    2022-11-13
  • C语言实现链表与文件存取的示例代码
    目录此处为main函数的内容一、输入数据到链表中二、把链表数据存入文件三、输出文件完整代码本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。 不...
    99+
    2022-11-13
  • C语言模拟实现strstr函数的示例代码
    目录strstr函数介绍BF算法介绍BF算法模拟实现strstr函数KMP算法介绍KMP算法模拟实现strstr函数strstr函数介绍 C语言提供了字符串匹配函数 strstr 函...
    99+
    2022-11-13
  • C语言实现栈的示例代码
    目录一、了解栈的结构特点二、具体实现补充 栈的用处一、了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。 压栈:栈的插入操作叫做进栈/压...
    99+
    2022-11-13
  • C语言朴素模式匹配算法实例代码
    一、什么是字符串的模式匹配? 字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。 注意: ①、子串——主串的一部分,一定存在。 ②、模式串——不一定能在主串中找到 &...
    99+
    2022-11-12
  • C语言实现线性动态(单向)链表的示例代码
    目录什么是链表为什么不用结构体数组链表的操作创建表删除元素插入元素代码及运行结果什么是链表 链表是数据结构里面的一种,线性链表是链表的一种,线性链表的延伸有双向链表和环形链表。在编程...
    99+
    2022-11-13
  • C语言i++和++i示例代码分析
    这篇文章主要讲解了“C语言i++和++i示例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言i++和++i示例代码分析”吧!一看就懂的i++和++i详解前言我相信很多朋友可能之前...
    99+
    2023-07-05
  • C语言实现通讯录的示例代码
    目录一、Contact.h文件二、Contact.c文件三、test.c文件一、Contact.h文件 包含函数的声明 #pragma once #define _CRT_SECUR...
    99+
    2022-11-13
    C语言实现通讯录 C语言 通讯录
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作