看过spring、hibernate源码的朋友对callback回调模式应该并不陌生
学过 java 的朋友一定遇到过 callback 回调函数 的例子,用一句话来概括就是:“if you call me, i will call back”。
自己学习了一下,写了个小例子,还请大伙指正。
JAVA中的回调函数:
1.先预定义的协议接口:
package com.test;
public interface CallBack {
public String execute();
}
2.实现行为
package com.test;
public class Service {
public String doExecute(CallBack callBack) {
// do something ....
return callBack.execute();
}
}
3.测试回调函数:
package com.test;
public class Client {
public static void main(String[] args) {
testCallBack();
}
public static void testCallBack(){
final Service service = new Service();
String result = service.doExecute(new CallBack(){
public String execute() {
String msg = "正在执行....";
return msg;
}
});
System.out.println(result);
CallBack callBeck = new CallBackImpl();
result = service.doExecute(callBeck);
System.out.println(result);
}
}
第二种实现:
a.步骤分解,再为 CallBack 提供一个实现类如:
package com.test;
public class CallBackImpl implements CallBack{
public String execute() {
String msg = "实现接口工作";
return msg;
}
}
b.测试回调函数:
package com.test;
public class Client {
public static void main(String[] args) {
testCallBack();
}
public static void testCallBack(){
final Service service = new Service();
CallBack callBeck = new CallBackImpl();
String result = service.doExecute(callBeck);
System.out.println(result);
}
}
对以上面进行分析,不难发现关键是在 Service 类中:
public String doExecute(CallBack callBack) {
// do something ....
return callBack.execute();
}
其原理便是如此,这便是我们在 java 中很多地方所遇见而不解其原理和用途,如 swing,jdbc中Spring中的HibernateTemplate和JpaTemplate等。
通过上面简单的例子可以看清楚原理。
java之回调函数-机制示例2 将模拟JDBC中的回调