C語言責(zé)任鏈模式示例代碼
介紹:
? 責(zé)任鏈模式是一種行為模式,它可以允許你將請求沿著處理者鏈進(jìn)行發(fā)送,收到請求以后, 每個處理者均可對請求進(jìn)行處理, 或?qū)⑵鋫鬟f給鏈上的下個處理者;

作用:
將請求按照鏈的方式一一傳遞
類比:
? 公司申請報(bào)銷,首先要leader審批通過,然后是HR,再然后是財(cái)務(wù),最后是老板,一級一級的將請求傳遞;
示例:
#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)
{
/*將審批節(jié)點(diǎn)添加到責(zé)任鏈上*/
for(int i = 0; i < sizeof(req_table) / sizeof(req_table[0]); i++)
{
list_insert_before(&chain_head, &(req_table[i].list));
}
/*報(bào)銷內(nèi)容*/
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)
{
/*報(bào)銷失敗*/
printf("Failed\r\n");
return;
}
}
/*報(bào)銷成功*/
printf("Success\r\n");
return;
}
總結(jié)
到此這篇關(guān)于C語言責(zé)任鏈模式示例代碼的文章就介紹到這了,更多相關(guān)C語言責(zé)任鏈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語言之char*和unsigned?char*的區(qū)別及說明
這篇文章主要介紹了c語言之char*和unsigned?char*的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Qt 數(shù)據(jù)庫QSqlDatabase使用示例
本文主要介紹了Qt數(shù)據(jù)庫QSqlDatabase使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
C++結(jié)構(gòu)體作為函數(shù)參數(shù)傳參的實(shí)例代碼
這篇文章主要介紹了C++結(jié)構(gòu)體作為函數(shù)參數(shù)傳參的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
C語言實(shí)現(xiàn)手機(jī)電話簿管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)手機(jī)電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語言實(shí)現(xiàn)基于控制臺的電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)基于控制臺的電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Qt基于TCP實(shí)現(xiàn)客戶端與服務(wù)端的連接
這篇文章主要為大家詳細(xì)介紹了Qt基于TCP實(shí)現(xiàn)客戶端與服務(wù)端的連接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

