Java服务_Java回调函数使用方法
1.背景
在java工程代码中,如果我们想要对在不同场景下执行不同操作的同类操作进行抽象,那么我们通常会创建一个接口来抽象,然后对这个接口创建不同的实现类,在不同常见下创建不同实现类的对象,调用其中的具体实现方法。这种写法相对比较冗余,有几个场景就得提前创建几个实现类和实现方法,那么借助回调函数的思想,可以在实际调用时再创建匿名内部类实现抽象方法,就显得更加轻量便捷。
如上述场景所说,被抽象出来的接口为A,想要调用A方法的是调用方B。原本是A自己创建实现类,B来直接调用,使用回调函数后,变成了B自己实现A接口的方法并执行。看上去回调接口A中的方法如同占位符号,具体实现代码由调用者传递执行,所以把A中方法叫做回调函数。
从上述背景与实现方法描述也可以看出,回调函数并不是绝对必需的,它只是提供了一种灵活的机制来处理一些特定场景,在这些场景下不使用回调函数仍然可以实现相同功能。也要注意,使用回调也可能导致代码变得复杂,可读性变差,特别是在回调链很长时,这些时候通常会用”回调地狱”这样的术语来形容。
2.常见使用场景
2.1 匿名内部类减轻业务实现
首先创建一个回调接口和回调方法:
1 | public interface CallBack { |
创建一个调用方法并以回调接口为参数类型:
1 | public class Tools{ |
然后就可以在各个调用方直接创建匿名内部类实现回调接口并调用:
1 | public class Executer{ |
2.2 异步回调函数
异步回调通常用于回调函数逻辑较为复杂耗时,但是调用方的后续执行逻辑并不强依赖于回调逻辑的场景,调用方在调用回调函数时新建一个线程去执行回调逻辑,不必等待回调逻辑执行完成,直接执行调用方的后续代码。
首先创建一个回调接口和回调方法:
1 | public interface CallBack { |
创建一个调用方法,以回调接口为参数类型,并创建一个新线程执行回调方法:
1 | public class Tools{ |
然后就可以在各个调用方直接创建匿名内部类实现回调接口并调用:
1 | public class Executer{ |
3.回调函数掌握测试
如下是一个按钮监听的业务场景,未使用回调函数时,业务代码如下,如果你能够正确地将回调函数代码添加上去,实现按钮点击监听逻辑,那说明你基本掌握了回调函数的用法:
1 | public interface ButtonListener { |
答案揭晓如下:
1 | public interface ButtonListener { |