回調函數 與 回調機制
1. 什麼是回調函數
回調函數(callback Function),顧名思義,用於回調的函數。 回調函數只是一個功能片段,由用戶按照回調函數調用約定來實現的一個函數。回調函數是一個工作流的一部分,由工作流來決定函數的調用(回調)時機。回調函數包含下面幾個特性:
- 屬於工作流的一個部分;
- 必須按照工作流指定的調用約定來申明(定義);
- 他的調用時機由工作流決定,回調函數的實現者不能直接調用回調函數來實現工作流的功能;
2. 回調機制
回調機制是一種常見的設計模型,他把工作流內的某個功能,按照約定的接口暴露給外部使用者,爲外部使用者提供數據,或要求外部使用者提供數據。
如上圖所示,工作流提供了兩個對外接口(獲取參數、顯示結果),以回調函數的形式實現。
- “獲取參數”回調函數,需要工作流使用者設定工作流計算需要的參數。
- “顯示結果”回調函數,提供計算結果給工作流使用者。
2. 回調機制應用
使用回調機制,可以爲工作流實現擴展。 可以把工作流中需要用戶干預的,或需要提供給用戶的數據以回調的模式提供給用戶。而用戶不需要知道整個工作的流程,只需知道回調函數的說明就可以使用工作流模塊提供的功能,這對信息的隱藏也是有作用的。
3. 回調機制的實現形式
- 回調函數
- 虛擬函數
- 事件
example: 以虛函數實現回調機制
class CWorkFlow
{
void init()
{
_a = 0;
_b = 0;
}
int _a;
int _b;
public:
void Start()
{
// 初始化
init();
// 調用處理數據
Handle( a, b );
// 報告結果
Report( a, b );
}
virtual void Handle( int &a, int &b ) = 0;
virtual void Report( int iRet) = 0;
};
class CMain :
public CWorkFlow
{
public:
void Handle( int &a, int &b )
{
a = a + b/2;
}
void Report( int iRet)
{
printf("iRet = %d/n", iRet);
}
};
// application
int main()
{
CMain main;
main.Start();
}