浅谈回调函数

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

   以上是本人对回调机制的一点拙见,如有错误希望指出!多谢!


猜你喜欢

转载自blog.csdn.net/cold1sober/article/details/80338879