标签:
在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
下面先写一个小例子来了解回调。
1 类图:
Boss类实现接口MyCallInterface,Worker中的setCallBack方法注册回调对象。
2 创建一个回调接口,让老板告知干完活如何找到他的方式:留下老板办公室地址:
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback; /** * 此接口为联系的方式,不论是电话号码还是联系地址,作为 * 老板都必须要实现此接口 * @author yingjie * */ public interface MyCallInterface { public void printName(); }</span>
3 创建回调对象,就是老板本身,为了让员工工作完成之后告诉老板
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback; /** * 老板是作为上层应用身份出现的,下层应用(员工)是不知道 * 有哪些方法,因此他想被下层应用(员工)调用必须实现此接口 * @author yingjie * */ public class Boss implements MyCallInterface{ @Override public void printName() { System.out.println("This is the Boss printName method"); } } </span>
4 创建控制类,也就是员工对象,他必须持有老板的地址(回调接口)
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback; public class Worker { private MyCallInterface callInterface; public Worker() { } //告诉老板的联系方式,也就是注册 public void setCallBack(MyCallInterface callInterface) { this.callInterface = callInterface; } public void callBoss() { callInterface.printName(); } }</span>
5 客户端调用
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.callback; public class Client { public static void main(String[] args) { Worker worker = new Worker(); worker.setCallBack(new Boss()); worker.callBoss(); //告诉老板干完了 } } </span>
6 为什么使用回调方法?
正常情况下开发人员使用已经定义好的API,这个过程叫调用。但是有时这样不能满足需求,就需要程序员注册自己的程序,然后让事先定义好多API在合适的时候调用注册的方法,这叫回调。
回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。
其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调,在需要调用时,只需引用这个函数指针和相关的参数指针。
7 总结
java中的回调就是获得另一个对象的引用,然后调用对象中的方法。
标签:
原文地址:http://blog.csdn.net/zhangyingjie09/article/details/46289655