在C和C++中,回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。
在Java中,就是类A调用类B中的某个方法b,然后类B又在某个时候反过来调用类A中的某个方法a,对于A来说,这个a方法便叫做回调方法(在Java中我习惯称它为回调方法),当然,A类和B类可以合并为一个。
回调就像23种经典设计模式一样,也是一种通用的模式,每种语言都可以实现该模式,只不过所采取的方法不一样罢了!C和C++是通过“函数指针”来调用处理方法的,而在Java的面向对象模型中,不支持这种方法,因而看起来好像排除了使用这种比较舒服的机制,但事实并非如此。
Java的接口提供了一种很好的机制来让我们达到和回调相同的效果。这个诀窍就在于定义一个简单的接口,在接口之中定义一个我们希望回调的方法。如以下代码:
pubilc interface CallBack{
public void callbackMethod();
}
public class A implements CallBack{ // A实现接口CallBack
B b = new B();
public void do(){
b.doSomething(this); // A运行时调用B中doSomething方法,以自身传入参数,B已取得A,可以随时回调A所实现的CallBack接口中的方法
}
public void callbackMethod(){ // 对A来说,该方法就是回调方法
System.out.println("callbackMethod is executing!");
}
}
public class B{
public void doSomething(CallBack cb){ // B拥有一个参数为CallBack接口类型的方法
System.out.println(“I am processing my affairs… ”);
System.out.println(“then, I need invoke callbackMethod…”);
cb.callbackMethod();
}
}