关于Java中监听回调的实现

在编程中使用回调来实现代码的自动调用是非常常见的。而对于编程新手来说如何实现回调是一件看起来比较困难的事,但实际上回调的实现是非常简单的。
首先我们要理解回调的概念,下面我们引用一下wiki上的定义

计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

但是在Java语言中并没有函数类型的参数,wiki也给出了说明

在缺少函数类型的参数的面向对象的程序语言中,例如Java,回调可以用传递抽象类或接口来模拟。回调的接收者会调用抽象类或接口的方法,这些方法由调用者提供实现。这样的对象通常是一些回调函数的集合,同时可能包含它所需要的数据。这种方法在实现某些设计模式时比较有用,例如访问者模式观察者模式策略模式

下面我就以为文件下载为例写一个文件下载完成后的回调函数。
首先我们要写一个接口这个接口内我们写一个完成下载的回调方法
interface DownLoadListener{ onDownLoadComplete(); }
而后我们在文件下载模块中写一个设置监听器的方法将别人实现的DownLoadListener设置给DownLoadFiles中持有的DownLoadListener对象
Class DownLoadFiles{ //下载模块自己持有的监听对象 DownLoadListener mListener; //该方法将其他人实现的DownLoadListener 对象设置给下载模块自己持有的对象 void setDownLoadListener(DownLoadListener listener){ mListener = listener; } }
现在我们只要在文件下载完成时调用listener的onDownLoadComplete方法就好
Class DownLoadFiles{ //下载模块自己持有的监听对象 DownLoadListener mListener; //该方法将其他人实现的DownLoadListener 对象设置给下载模块自己持有的对象 public void setDownLoadListener(DownLoadListener listener){ mListener = listener; } downLoad(){ ...... if(downLoadfinish){ listener.onDownLoadComplete(); } ...... } }
使用这个回调也非常简单
class MyClass{ Function(){ DownLoadFiles downLoad = new DownLoadFiles(); downLoad.setDownLoadListener( new DownLoadListener(){ onDownLoadComplete(){ //在此处实现你想要回调具体功能 ...... } } ); } }

参考和推荐阅读
https://zh.wikipedia.org/wiki/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0
https://www.zhihu.com/question/19801131

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容