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做的事情吗。