Java回调函数的一种理解

先上代码:

/**
 * 下层类(被调用者,例如一些已封装好的类)。
 * @author hhj
 *
 */
public class Callee {

    //关联了一个回调函数接口
    private ICallback iCallback;
    
    /**
     * 提供给外界注入回调函数接口的具体实现
     * 注册回调函数
     * 这里提供的是设置注入,构造注入也行
     * @param iCallback
     */
    public void setCallback(ICallback iCallback) {
        this.iCallback = iCallback;
        System.out.println("----调用者已经注册回调函数----");
    }
    
    /**
     * 第一种方式,需先执行setCallback(ICallback iCallback)方法注册回调函数
     */
    public void executeCallerWant() {       
        
        //调用回调函数
        this.iCallback.callbackMethod();
       
    }
    
    /**
     * 这是第二种方式,直接依赖依赖回调函数接口,执行回调函数
     * @param iCallback
     */
    public void executeCallerWant(ICallback iCallback) {
        iCallback.callbackMethod();
    }
    
}


/**
 * 上层(调用者,例如我们字节编写的应用),main方法里表示调用下层
 * 
 * @author hhj
 *
 */
public class Caller {

    public static void main(String[] args) {
        Callee callee = new Callee();
        
        //第一种形式
        //向下层注册回调函数接口的具体实现
        callee.setCallback(new ICallback() {
            
            @Override
            public void callbackMethod() {
                System.out.println("我就是回调函数1");
                
            }
        });
        
        //调用下层的一些方法
        callee.executeCallerWant();
        
        System.out.println("------------------------------");
        
        //第二种形式
        callee.executeCallerWant(new ICallback() {
            
            @Override
            public void callbackMethod() {
                System.out.println("我就是回调函数2");
                
            }
        });
        
        
    }
    
}

/**
 * 回调函数接口
 * @author hhj
 *
 */
public interface ICallback {

    /**
     * 回调函数(上层想让下层执行的代码都写在这个方法里)
     */
    void callbackMethod();
}


设计一些类(被调用者)给别人使用的时候,但却不知道调用者到底想怎样执行,于是就将调用者想实现的行为的封装抽象成一个接口,且该类关联或者依赖这样一个抽象接口。调用者只需具体实现该接口,并将该接口注入或传入给被调用者callee,被调用者适时调用回调函数即可。 这样做的好处就是灵活性好,

被调用者:“你想让我执行你(调用者)自己的方法?行,你只要符合我的规范,实现我提供的接口,并告诉我(注册----构造注入、设置注入或者直接作为参数传入),后面想让我执行的时候,自然就知道你要执行什么了”。

回调函数就是由调用者 事先 告诉被调用者,被调用者在合适的时间调用的一个方法。

张三李四打电话帮忙解题的例子也一样,只不过被调用者在调用回调函数前后先做一些其他的事(李四这里是解题),之后再调用回调函数,不过这里有点异步回调的感觉,就是李四解好题之后,再用回调函数通知张三,不需要张三等他。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值