目录介绍:作用:类比:示例:总结介绍: 责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处
责任链模式
是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者;
将请求按照链的方式一一传递
公司申请报销,首先要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://lsjlt.com/news/161699.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0