实例基于知乎上一个解释什么是回调机制的回答。
描述: 一个顾客入住了一个酒店,酒店提供叫醒服务,顾客由于第二天早晨有很重要的事情,所以使用了叫醒服务。让酒店工作人员在第二天早晨7:00叫醒顾客。
在这个例子中,顾客是A类,酒店是B类,顾客预订叫醒服务相当于A调用了B的b方法,酒店叫醒顾客相当于B调用了A的callback方法(被叫醒)。
下面给出代码:
1、首先是回调接口:
package callback;//回调接口public interface CallBack {public void beWakedUp();}
2、接着是顾客类 顾客类实现回调接口
package callback;public class Customer implements CallBack {//顾客同时持有酒店类的对象,后面定义private Hotel hotel;public Customer(Hotel hotel) {this.hotel = hotel;}@Overridepublic void beWakedUp() {System.out.println("被叫醒了");}// 客户预约使用酒店的叫醒功能public void bookWakeService() {hotel.wakeService(this);}// 省略get set}
3、酒店类
package callback;public class Hotel {public void wakeService(CallBack callBack) {System.out.println("顾客预约了叫醒服务");try {// 模拟时间过了一晚上Thread.sleep(3000);System.out.println("时间过去了一夜");callBack.beWakedUp();} catch (InterruptedException e) {e.printStackTrace();}}}
4、测试主类
package callback;public class Main {public static void main(String[] args) {Hotel hotel = new Hotel();Customer customer = new Customer(hotel);customer.bookWakeService();}}
输出结果为: 
不知道你对回调机制有没有进一步理解呢?
最后总结一下Java中实现回调机制的大体步骤吧:
- 定义回调接口
CallBack - 类A实现回调接口
CallBack,同时持有类B的对象b - 类B中有方法
method(CallBack cb) - 由于A中持有B的对象,所以A可以调用B的method方法,并将自身作为参数传入method(因为A实现了CallBack接口,所以可以传入)。
- method方法执行完毕后,调用回调方法。
