欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言責任鏈模式示例代碼

 更新時間:2022年01月06日 09:04:56   作者:Hongggggggg  
大家好,本篇文章主要講的是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語言實現(xiàn)學生管理系統(tǒng)總結

    C語言實現(xiàn)學生管理系統(tǒng)總結

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++20 特性 協(xié)程 Coroutines(1)

    C++20 特性 協(xié)程 Coroutines(1)

    這篇文章主要給大家分享得是C++20 得特性 協(xié)程 Coroutines,下面文章內容我們將來具體介紹什么是協(xié)程,協(xié)程得好處等知識點,需要的朋友可以參考一下
    2021-10-10
  • 模擬鼠標事件的實現(xiàn)思路及代碼

    模擬鼠標事件的實現(xiàn)思路及代碼

    這篇文章主要介紹了模擬鼠標事件的實現(xiàn)思路及代碼,有需要的朋友可以參考一下
    2013-12-12
  • Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    這篇文章主要為大家詳細介紹了通過OpenCV實現(xiàn)馬賽克和毛玻璃濾鏡效果與圖片的融合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++ 動態(tài)數(shù)組模版類Vector實例詳解

    C++ 動態(tài)數(shù)組模版類Vector實例詳解

    這篇文章主要為大家詳細介紹了C++動態(tài)數(shù)組模版類Vector實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言中判斷素數(shù)(求素數(shù))的思路與方法實例

    C語言中判斷素數(shù)(求素數(shù))的思路與方法實例

    計算機或者相關專業(yè)基本上大一新生開始學編程都會接觸的一個問題就是判斷質數(shù),下面這篇文章主要給大家介紹了關于C語言中判斷素數(shù)(求素數(shù))的思路與方法,需要的朋友可以參考下
    2022-03-03
  • 淺談C結構和C++結構之間的區(qū)別

    淺談C結構和C++結構之間的區(qū)別

    這篇文章主要介紹了淺談C結構和C++結構之間的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C++深入探究不同的繼承體系

    C++深入探究不同的繼承體系

    繼承是C++面向對象編程中的一門。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對父類的允許訪問的方法實行的過程進行重新編寫,返回值和形參都不能改變。就是對原本的父類進行重新編寫,但是外部接口不能被重寫
    2022-05-05
  • zlib庫壓縮和解壓字符串STL string的實例詳解

    zlib庫壓縮和解壓字符串STL string的實例詳解

    這篇文章主要介紹了zlib庫壓縮和解壓字符串STL string的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • 聊聊Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題

    聊聊Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題

    這篇文章主要介紹了Qt+OpenCV聯(lián)合開發(fā)之圖像的創(chuàng)建與賦值問題,給大家介紹了圖像的克隆及拷貝問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論