回调函数的问题一直困扰我,网上也是众说纷纭,却一直不能解决我的困惑。
1.回调函数的意义是: 当你想要别人的代码执行你的代码时,而你又不能修改别人代码。(网上有人这么说)
加入我个人的理解,这里的不能修改应该是指,你不能去干涉别人代码,但是可以协商或者提出需求说 我需要一个接口,在你完成XX操作后,调用我的DoXX函数,这时,大家都会想到一个方法,直接让别人的代码执行DoXX函数,不就ok了? 我也在困惑~ ,今天看到了这个说法,回调函数的实现可以有多种,别人代码直接调用你的方法也ok,但是在软件设计时,我们要遵循模块内内聚,模块间低耦合,它使得模块间更多的从事着单向的调用工作,单项的调用,当高层需要使用低层的状态时,使用普通的函数调用即可,当低层关心高层的状态变化时,及需要通过回调函数来实现。这里的高低是相对的~)
1.回调函数一般使用函数指针实现。什么时间怎么样将自己的函数指针“注册”到别人代码中?
由第一条知道,模块间一般是单向的调用关系,比如B模块的接口是暴露给A模块的,及A中可以对B的接口进行使用,反之则不行,但是B需要知道A的一些状态,来进行自己下一步的操作,简单的说,B需要调用A的函数时, 这时我们可以将模块A的指针或者对象在模块B中声明,这违反了软件设计的原则。回调函数的解决方法是,B提供一个接口,这个接口接受一个函数指针和参数,在A模块中,我们将B需要的函数通过该接口进行注册。然后b执行时,就可以完成需要的状态了。