钩子:利用面向对象思想多态性,调用方保存着被调用方的基础接口指针,调用方直接调用接口指针里面方法,方法具体实现逻辑由该接口的派生类实现。
回调:调用方调用被调用方的方法,这时候被调用方的方法又调用了调用方的方法。
我觉得回调也是钩子的一种表现形式。
我对钩子的理解是这样子的先把一件事情的流程订好,然后具体事情就由具体单位去完成。
举个钩子例子:
政府为了方便老百姓办事情,成立了办事大厅。商人到当地办事大厅办营业执照,办事大厅把这个事情交个当地工商局来办。于是办执照这个事情的流程就是
商人->办事大厅->工商局->办证
这个流程定下来之后,就可以套到其他地方,比如
在北京办执照就是
商人->北京办事大厅->北京工商局->办证
在上海办执照就是
商人->上海办事大厅->上海工商局->办证
于是在程序里就是
地方办事大厅是办事大厅的子类
地方工商局是工商局的子类
每个地方办证方法不一样,有不同的工商局自己定。
举个回调例子(想不出来了勉强想了一个):
政府为了方便老百姓办事情,成立了办事大厅。老百姓到当地办事大厅办暂住证,办事大厅说你填个表吧。填好之后就给办了。于是办执照这个事情的流程就是
老百姓->办事大厅->老百姓填表->办事大厅办证
每个老百姓填表方法不一样,由不同的老百姓自己定。
所以老百姓去办事大厅办事最后还得调动自己做事这就是回调了。
于是我理解是
如果回调就需要写比较多的调用方方法
如果钩子就需要写比较多的被调用方方法