C語言責任鏈模式示例代碼
介紹:
? 責任鏈模式
是一種行為模式,它可以允許你將請求沿著處理者鏈進行發(fā)送,收到請求以后, 每個處理者均可對請求進行處理, 或將其傳遞給鏈上的下個處理者;
作用:
將請求按照鏈的方式一一傳遞
類比:
? 公司申請報銷,首先要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) { /*將審批節(jié)點添加到責任鏈上*/ 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語言責任鏈內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++20 特性 協(xié)程 Coroutines(1)
這篇文章主要給大家分享得是C++20 得特性 協(xié)程 Coroutines,下面文章內容我們將來具體介紹什么是協(xié)程,協(xié)程得好處等知識點,需要的朋友可以參考一下2021-10-10Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)
這篇文章主要為大家詳細介紹了通過OpenCV實現(xiàn)馬賽克和毛玻璃濾鏡效果與圖片的融合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11C++ 動態(tài)數(shù)組模版類Vector實例詳解
這篇文章主要為大家詳細介紹了C++動態(tài)數(shù)組模版類Vector實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02C語言中判斷素數(shù)(求素數(shù))的思路與方法實例
計算機或者相關專業(yè)基本上大一新生開始學編程都會接觸的一個問題就是判斷質數(shù),下面這篇文章主要給大家介紹了關于C語言中判斷素數(shù)(求素數(shù))的思路與方法,需要的朋友可以參考下2022-03-03聊聊Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題
這篇文章主要介紹了Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題,給大家介紹了圖像的克隆及拷貝問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01