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

作用:
將請(qǐng)求按照鏈的方式一一傳遞
類比:
? 公司申請(qǐng)報(bào)銷,首先要leader審批通過(guò),然后是HR,再然后是財(cái)務(wù),最后是老板,一級(jí)一級(jí)的將請(qǐng)求傳遞;
示例:
#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語(yǔ)言責(zé)任鏈模式示例代碼的文章就介紹到這了,更多相關(guān)C語(yǔ)言責(zé)任鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語(yǔ)言之char*和unsigned?char*的區(qū)別及說(shuō)明
這篇文章主要介紹了c語(yǔ)言之char*和unsigned?char*的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Qt 數(shù)據(jù)庫(kù)QSqlDatabase使用示例
本文主要介紹了Qt數(shù)據(jù)庫(kù)QSqlDatabase使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
C++結(jié)構(gòu)體作為函數(shù)參數(shù)傳參的實(shí)例代碼
這篇文章主要介紹了C++結(jié)構(gòu)體作為函數(shù)參數(shù)傳參的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
C語(yǔ)言實(shí)現(xiàn)手機(jī)電話簿管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)手機(jī)電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語(yǔ)言實(shí)現(xiàn)基于控制臺(tái)的電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)基于控制臺(tái)的電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
C語(yǔ)言深入回顧講解結(jié)構(gòu)體對(duì)齊
C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來(lái)了解C 的結(jié)構(gòu)體內(nèi)存對(duì)齊2022-06-06
Qt基于TCP實(shí)現(xiàn)客戶端與服務(wù)端的連接
這篇文章主要為大家詳細(xì)介紹了Qt基于TCP實(shí)現(xiàn)客戶端與服務(wù)端的連接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

