一、前言
耦合性是程序結(jié)構(gòu)中各個模塊之間相互關(guān)聯(lián)的度量。它取決于各個模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。
編寫代碼有兩個核心點:隔離變化、降低復(fù)雜度,而解耦是達(dá)到這兩個目標(biāo)的重要手段。
二、使用回調(diào)函數(shù)降低耦合
問題描述:
實現(xiàn)回家函數(shù)come_home,傳入出發(fā)的時間,打印回家的方式以及到家的時間,有兩種回家方式:開車、走路。其中開車需要1小時,走路需要3小時。
功能分析:
由于回家方式不同,所用時間不同,因此到家的時間不同,可以將come_home函數(shù)代碼分為變化部分以及不變部分,將變化部分寫在回調(diào)函數(shù)中,實現(xiàn)隔離變化的目的。
變化部分:
輸出回家方式,根據(jù)出發(fā)時間,計算到家時間。
不變部分:
輸出到家時間。
1、定義回調(diào)函數(shù)指針
typedef int (*on_arrival_t)(void* ctx, int departure_time);
2、編寫come_home函數(shù)
void come_home(int departure_time, on_arrival_t on_arrival, void* ctx) { int arrival_time = on_arrival(ctx, departure_time); /* 變化部分:調(diào)用回調(diào)函數(shù)計算到家時間 */ printf("arrival_time: %d ", arrival_time); /* 不變部分:打印到家時間 */ }
3、實現(xiàn)具體的回調(diào)函數(shù)
/* 開車回家 */ int on_drive(void* ctx, int departure_time) { int arrival_time = departure_time + 1; /* 計算開車回家時間 */ printf("drive "); /* 打印回家方式 */ return arrival_time; } /* 走路回家 */ int on_walk(void* ctx, int departure_time) { int arrival_time = departure_time + 3; /* 計算走路回家時間 */ printf("walk "); /* 打印回家方式 */ return arrival_time; }
4、main函數(shù)
int main(int argc, char* argv[]) { come_home(17, on_drive, NULL); /* 17點開車回家 */ come_home(17, on_walk, NULL); /* 17點走路回家 */ return 0; }
5、輸出
審核編輯:劉清
-
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
88瀏覽量
11825
原文標(biāo)題:使用回調(diào)函數(shù)降低程序耦合性
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
C語言使用回調(diào)函數(shù)模擬委托與反射
回調(diào)函數(shù)小結(jié)
pwm程序停止調(diào)用回調(diào)函數(shù)
請問LWIP協(xié)議中是怎樣自動調(diào)用回調(diào)函數(shù)?
使用回調(diào)函數(shù),button消失怎么回事
請問zigbee中什么時候用回調(diào)函數(shù)?
用DMA去讀取電壓都會調(diào)用回調(diào)函數(shù)的解決辦法
回調(diào)函數(shù)的作用是什么?怎么使用回調(diào)函數(shù)?
怎樣去寫回調(diào)函數(shù)呢?怎樣去使用回調(diào)函數(shù)呢
為什么單片機(jī)中斷函數(shù)會使用回調(diào)函數(shù)實現(xiàn)?
LabWindows/CVI 程序 回調(diào)函數(shù)設(shè)計

C語言使用回調(diào)函數(shù)模擬委托與反射
函數(shù)指針和回調(diào)函數(shù)的使用方法
如何使用C語言回調(diào)函數(shù)降低程序耦合性呢?

評論