目录
转载自:https://www.jianshu.com/p/b8a271728638
一、定义
- 回调的意义在于,通过在其他对象中调用自身类中定义的函数,达到一定的目的(常见于事件注册,监听以及线程Runnable中的run)。
- 回调函数定义:
- 传递一个函数A到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称,就叫做匿名回调函数.
- 或者将一个方法对象a 传递给另一个方法对象 b,让后者在适当的时候执行 a的方法,那么a的方法就叫做回调函数。
-
java中回调函数的实现:
java不支持指针,但是可以通过定义接口的方式实现回调。
定义一个只有回调函数的接口,并将该接口对象传递给调用函数,则在调用函数执行时,会执行回调函数
二、举例【观察者模式】
举例二(观察者模式):注册多个对某个事件监听的对象,这些对象由类CallListener实例化获取(该类实现一个事件发生的接口Event)。再定义类Notifier,其中维持一个监听对象的数组,用于一旦事件发生立即通知各个监听对象,具体处理问题逻辑全在监听类所定义的方法中,与Notifier无关,处理过程的方法是监听类中定义的,即Notifier回调CallListener中的方法,该方法就是叫做回调方法。【通知者会在dowork时调用监听者CallListener的方法】
例二代码:
//接口,包含回调函数声明
public interface Event{
public void processEvent();
}
//实现接口的回调方法
public class CallListener implements Event{
private String name;
public CallListener(String name) {
// 新建一个事件通知者对象,并把自己传递给它
this.name= name;
}
// 实现事件发生时,实际处理事件的方法
@override
public void processEvent() {
// 监听到事件发生了,进行处理
}
}
//传入包含回调函数的对象
class Notifier{
private List callListenerList=new ArrayList();
public void regist(CallListener callListener){
callListenerList.add(callListener);\
}
public void doWork(){
for(CallListener callListener: callListenerList) {
//触发回调函数
callListener.processEvent("sample event");
}
}
}
测试代码:
public class Test {
public static void main(String[] args) {
Notifier notifier = new Notifier ();
CallListener a = new CallListener("Listener A");
CallListener b = new CallListener("Listener B");
// 给通知者注册监听者,并直接启动通知
notifier.regist(a);
notifier.regist(b);
// 此处回调监听Listener的processEvent处理事件
notifier.doWork();
}
}
作者:young_dreamer
链接:https://www.jianshu.com/p/b8a271728638
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。