java的函数回调的概念个人总觉得有点别扭。个人认为其无非是模板方法模式的一种。看一下网络上都用的例子:
//回调接口
public interface CallBack {
//执行回调操作的方法
void execute();
}
//工具和测试类
public class Tools {
/**
* 测试函数使用时间,通过定义CallBack接口的execute方法
* @param callBack
*/
public void testTime(CallBack callBack) {
long begin = System.currentTimeMillis(); //测试起始时间
callBack.execute(); ///进行回调操作
long end = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间
}
public static void main(String[] args) {
Tools tool = new Tools();
tool.testTime(new CallBack(){
//定义execute方法
public void execute(){
//这里可以加放一个或多个要测试运行时间的方法
TestObject.testMethod();
}
});
}
}
在Tools类中,通过callback.execute()调用callback的execute()方法,然后execute()方法的真正实现是在Tools类的内部类中实现的,从而Tools类调用callback.execute()方法的时候,这个方法又调用了Tools类中该方法的实现。
在所谓的“//进行回调操作”时,就是实现规定程序的规范(这里是方法名),而该方法 的真正实现是在testTime()参数传入时完成的。而这不就是Template Method Pattern做的事情吗。