浏览 1910 次
锁定老帖子 主题:java和javascript中的回调函数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-12
先看看java中的回调函数,java中很多模式和它类似,有访问者,观察者等模式。ioc等也有这个类似的原理。
public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new Test().doExecute(new CallBack(){ public void execute() { System.out.println("正在执行...."); } }); } private void doExecute(CallBack callBack) { System.out.println("回调前....."); callBack.execute(); System.out.println("回调后....."); } } 输出结果为:
回调前..... 正在执行.... 回调后..... 这里充分的体现了不是我来调用你,而是你来调用我。 这里的我就是“doExecute”,你就是"execute"
回调可以用在哪些地方呢?
1,比如著名的ioc的事务处理就是这样的,每个方法的事务处理都是一样的,都是些开始一个事务,用try包住,等等,所以就可以不管他们,变的只是要执行方法的不同,比如存储,删除,查询什么的。
2,可以减少写类,一个接口,可以有很多的实现类,在回调里面,就成了匿名的了。著名的jive里面DatabaseObjectFactory 就是这个用法。
interface DatabaseObjectFactory { /** * Returns the object associated with id or null if the * object could not be loaded. * * @param id the id of the object to load. * @return the object specified by id or null if it could not * be loaded. */ public Object loadObject(long id); }
外面调用的根据id不同产生任何你想要的对象。
在看看javascript里面的:
function Test() { var self=this; this.func1=function() { self.test2(function (){ alert('正在执行');}) } } Test.prototype.test2=function(func) { alert("回调前做些东西"); if(func) func(); alert("回调后做些东西"); } 然后,在html里面: <html> <head> <script type=text/javascript src="1.js"> </script> <script> new Test().func1(); </script> </head> <body> </body> </html> java和javascript的回调都差不多。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |