【Java基础】回调函数

目录

 

一、定义

二、举例【观察者模式】


转载自: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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值