淺談回調函數

1、回調函數的定義

    簡而言之,回調函數就是使得內部函數(一般是庫函數)可以調用外部函數(自定義函數)的過程。

2、C/C++下的回調函數

     在C/C++語言中,指針是一個用來指向內存地址的變量。當程序運行時,所有與運行有關的對象都要加載到內存中,即與程序任何有關的任何對象都可以通過指針指向它。函數是存放在內存代碼區域中,即可以通過指針來存取函數,把指向函數入口的指針稱之爲函數指針。

    回調函數,即使用者自己定義一個函數並實現函數的功能,然後將這個函數作爲參數傳入到別人的函數中,但由別人在運行期間通過參數傳遞的方式調用。

帶參的回調函數代碼實例
//定義帶參回調函數
void PrintfText(char* s) 
{
    printf(s);
}

//定義實現帶參回調函數的"調用函數"
void CallPrintfText(void (*callfuct)(char*),char* s)
{
    callfuct(s);
}

//在main函數中實現帶參的函數回調
int main(int argc,char* argv[])
{
    CallPrintfText(PrintfText,"Hello World!\n");
    return 0;
}

3、Java下的回調函數

    Java語言中不存在指針機制,無法通過函數指針的方式實現回調函數。Java支持Interface,通過Interface可以實現相同的回調,通過定義一個簡單的interface,聲明一個被希望回調的方法。

    介紹經典的回調方式:

   (1)調用類Caller實現接口CallBack;

   (2)調用類Caller中有一個被調用類Callee的引用caller;

   (3)被調用類Callee中有一個參數爲callback的方法getMessage(CallBack callback);

   (4)Caller的對象caller調用B的方法getMessage(CallBack callback)--類Caller調用類Callee的方法getMessage(); 

   (5)對象callee可以在getMessage()方法中調用類Caller中的方法message();--類Callee中調用類Caller中的方法meissage();

示例代碼

//回調接口
public interface CallBack {

	public void message();
}
public class Caller implements CallBack {
	//調用者caller中被調用者的引用
	private Callee callee;
	//構造函數
	public Caller(Callee callee) {
		
		this.callee = callee;
	}
	
	public Callee getCallee() {
		return callee;
	}

	public void setCallee(Callee callee) {
		this.callee = callee;
	}

	@Override
	public void message() {
		// TODO Auto-generated method stub
		System.out.println("回調完成");
	}

}
public class Callee {
	//被調用者函數中需要有callback參數的方法
	public void getMessage(CallBack callBack) {
		
		callBack.message();
	}
}
public class test {
	public static void main(String[] args) {
		//
		Callee callee = new Callee();
		//實現callback接口的調用者caller
		Caller caller = new Caller(callee);
		
		caller.getCallee().getMessage(caller);
	}
}

   以上是本人對回調機制的一點拙見,如有錯誤希望指出!多謝!


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