回調機制的通俗理解

回調函數 與 回調機制

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();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章