最近在工作中经常会遇到“回调函数”这样一个词,刚开始的时候确实也不是很明白什么是回调函数,感觉挺高深的,后来经过一系列的资料查找和仔细体会,发现回调函数也就那么一回事儿,下面就来说说吧。
所谓回调,和普通的方法调用不同的是,A类在调用B类的时候,B类同样拥有调用A类的权利,实现的关键就是:
1、定义一个回调接口,CallBackInterface,同时在里面声明回调函数f();
2、定义一个类A,让它去实现回调接口CallBackInterface,实现接口里的回调函数,函数里面的内容就是你要实现的业务逻辑代码。
3、有一个类B,它里面必须有一个函数g(CallBackInterface ci),这个函数需要有CallBackInterface类型的参数,这样就可以在类B里面去调用接口里面定义的那个回调函数f()了。
4、注册回调函数,把类A的对象传入到类B中,这样就形成了一个回调的机制。
下面还是举一个大家很熟悉也非常经典的回调例子吧。
有一个老板,他有很多员工,他不可能一直监督每一位员工的工作情况,于是要求员工在完成了某项工作后主动地告诉老板,老板根据他们的通知再做其他的安排。老板相当于程序中高层部分,员工相当于程序中底层的部分。下面是实现步骤:
//回调接口,员工通过这个借口去通知老板
public interface CallBackInterface{
//声明回调函数
public void talkAbout(String mess);
}
//老板这个人,实现回调接口
public Class Boss implements CallBackInterface{
//实现回调函数
@Override
public void talkAbout(String mess){
System.out.println("员工说:"+mess);
System.out.println("老板说:信息已经收到啦!");
}
}
//员工类
public Class Employee{
CallBackInterface ci;
//有一个方法去获得回调接口类型的对象
public Employee(CallBackInterface ci){
this.ci=ci;
}
//员工开始工作了,他工作完后自动给他的老板报告信息
public void doWork(){
for(int i=1;i<100;i++){
System.out.println("正在做地"+i+"件事");
}
//调用回调函数,告诉老板我完成了工作
ci.talkAbout("老板我完成工作了!");
}
}
//主函数
public static void main(String[] args){
//老板出现了
Boss boss=new Boss;
//有一个员工,创建他时把boss对象传入,完成回调的注册
Employee em1=new Employee(boss);
//开始工作了
em1.doWork();
}
当员工完成了工作后,他就会去回调Boss类里面的回调方法,实现了底层对高层的调用。