回调:类A调用类B的b方法,而在b方法执行过程中,b方法又调用了类A的a方法,这个过程就叫做回调,而方法a就叫回调函数。(自己的理解)
一般来说,类A不会调用方法a,他只提供方法a供类B调用,由于类B不知道类A中的方法a是长的什么样,所以类B会跟类A约定好接口规范(函数原型),这样,类A会通过类B的一个方法r,告诉类B,我要调用你的方法b,这个过程就叫做回调函数的注册,这方法r就是一个注册函数。
现实的例子:
其实回调,简单的可以说是:将自己的引用传给别的方法,在别的方法里面,通过自己的引用调用自己的方法。
将电话号码(自己的引用)给朋友,朋友再打电话(调用自己引用的方法)回拨给自己
应用场景:模版方法很常用
java回调机制的通俗理解
回调的通俗理解:你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你会把你的电话号码告诉他,让他解决之后打电话通知你。即回调就是体现在你的同学又反过来拨打你的号码。 拿这个例子类比Ajax中的回调机制以及Spring中HibernateTemplate用到的回调+模板机制,可以更容易地理解回调机制。
Ajax代码:
function test{
if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
xmlHttp.onreadystatechange = callback;
xmlHttp.open(…);
xmlHttp.send(null);
}
function callback{ }
其中xmlHttp.onreadystatechange = callback 就是表示在state改变时调用callback函数,而这个callback就是一个回调函数。
类比:xmlHttp发出请求就相当于你打电话给你的同学,xmlHttp不知道state何时发生变化,就相当于你不知道你的同学何时能解决问题。Callback函数就相当于你的电话号码,
state发生变化时会调用callback函数,同样你的同学解决问题后会打电话通知你。
Spring中HibernateTemplate的回调机制与模板方法
HibernateTemplaet的源码很复杂,我们可以写一段简单的代码来模拟一下:
interface CallBack{
public void doCRUD();
}
public class HibernateTemplate {
public void execute(CallBack action){
getConnection();
action.doCRUD();
releaseConnection();
}
public void add(){
execute(new CallBack(){
public void doCRUD(){
System.out.println("执行add操作...");
}
});
}
public void delete(){
execute(new CallBack(){
public void doCRUD(){
System.out.println("执行delete操作...");
}
});
}
public void getConnection(){
System.out.println("获得连接...");
}
public void releaseConnection(){
System.out.println("释放连接...");
}
}
类比:execute方法可以体现出模板模式。以add方法为例,调用execute方法就相当于你打电话给你的同学,但是你的同学说需要时间,就像execute方法需要首先获得连接一样,于是你把CallBack匿名类传递给它,在它获得连接之后会执行你的add操作,这就相当于你把电话号码告诉你的同学,他解决问题之后再打给你一样。当然这种通俗理解不能很好地体现出Spring中的Callback模式和Template模式合用的简单与灵活,这里只是利于理解一点。
分享到:
相关推荐
一张图让你通俗易懂得理解java反射机制!
打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。...而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function)。
websocket 实现实时推送的例子(工厂模式,回调机制),利用websocket的浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端的优点实现
支持向量机SVM通俗理解(python代码实现).pdf 支持向量机SVM通俗理解(python代码实现).pdf 支持向量机SVM通俗理解(python代码实现).pdf 支持向量机SVM通俗理解(python代码实现).pdf 支持向量机SVM通俗理解...
本文档适合正在学习java和零基础的学习使用。通俗易懂,提高学习速率。
以简单通俗的描述来介绍了设计模式 给出了相应设计模式的代码 易于初学者使用
鉴于此,本文力争以通俗的语言讲解PID的各个含义。 PID控制是自动化控制领域应用非常广的控制方式,P代表比例,I代表积分,D代表微分,从这些名词中可以看出,PID控制是基于数学中一项重要的分支:微积分学为基础的...
通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf通俗理解LDA主题模型.pdf
23种JAVA 设计模式 以JAVA代码实现 例子典型易懂 看了之后能有比较深刻的印象 比买书效果好多了
机器学习两种方法——监督学习和无监督学习(通俗理解).pdf机器学习两种方法——监督学习和无监督学习(通俗理解).pdf机器学习两种方法——监督学习和无监督学习(通俗理解).pdf机器学习两种方法——监督学习和无监督...
简单的介绍了java中关于输入和输出 流的相关概念,通俗易懂。
通俗易懂的java设计模式 看了就会 内有完整的实例
CNN卷积神经网络原理的通俗理解,包括什么是神经元,学习的过程,卷积的过程等等
主要介绍了C#的回调机制,较为通俗的分析了回调机制的本质与使用时的注意事项,对于C#的学习有一定的参考借鉴价值,需要的朋友可以参考下
很详细 又不啰嗦的 ppt教程 通俗易懂不啰嗦
canny算子的通俗理解!用c语言也较容易实现
通俗讲解回调函数的作用,以及在何种情况下使用。中间函数的调用。
通俗理解页面生命周期,资料还不错,可以借鉴!
一位高手自己写的Java的23种设计模式,例子很形象生动,很通俗易懂,希望对你有帮助。
ava反射机制 概述:通俗地讲Java反射就是通过类名获得类的实例的方法。java.lang.reflect提供了实现Java反射的API。