假设有A、B两个类,A类需要调用B类的方法来得到期待的结果并执行相关操作,但又不想耗时等待,此时A类可以使用回调函数来实时获取B类的计算结果并执行相关操作。
实现回调功能一般需要三部分代码组成,调用者A类,被调用者B类与调用接口C。假设B类中有b1( ),b2( )函数,b1( )的功能为为传入接口实例,b2( )为耗时函数,初始化时另开线程执行,并有返回结果。接口C中有c1( str )回调函数。对于接口C的c1( str )方法,A类重写了c1( str )方法实现了具体功能(如打印str值),B类调用了c1( str )方法(具体功能未知)。
现在我们从程序运行的流程来理解回调流程,A类中实例化B类对象ob,ob调用b1( )方法,将接口C实例化对象(重写c1( )方法)传入b1( )方法中,即B ob = new B( ); ob.b1(new C( ) { c1( str ) {打印str值} } );
因为B类实例化时会得到A类传入的C实例化对象oc,所以B类中所有执行到的oc.c1( str )方法都会变成A类重写的c1( str )方法,功能为“打印str值”。
因此,在B类实例初始化,执行完b2( )后,再执行oc.c1( str ),即可实现“A类实时获取B类的计算结果并执行相关操作”的功能。
总结:回调函数除了上述情景用到,它的统一接口,具体功能具体实现,让代码逻辑更加集中,容易理解。