Java 回调函数理解

回调的意义在于,通过在其他对象中调用自身类中定义的函数,达到一定的目的(常见于事件注册,监听以及线程Runnable中的run)。

举例一:Parent类是接口,自带oncall函数(用于被其他任何人电话联系),父亲类Father实现Parent接口并重写oncall方法,Father类带有成员孩子类Children。Children类自带方法做作业doHomework(),做完作业后孩子应该及时电话通知老爸作业做完了!,因此doHomework中会调用Parent类的oncall方法告知父亲,作业已经完成。整个流程中oncall就是回调函数,是Father类定义的,被Children中调用并返回结果给Father类。

举例二(观察者模式):注册多个对某个事件监听的对象,这些对象由类CallListener实例化获取(该类实现一个事件发生的接口Event)。再定义类Notifier,其中维持一个监听对象的数组,用于一旦事件发生立即通知各个监听对象,具体处理问题逻辑全在监听类所定义的方法中,与Notifier无关,处理过程的方法是监听类中定义的,即Notifier回调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();       
    }
}

你可能感兴趣的:(Java 回调函数理解)