六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 52|回复: 0

java和javascript中的回调函数

[复制链接]

升级  0.67%

11

主题

11

主题

11

主题

秀才

Rank: 2

积分
51
 楼主| 发表于 2013-2-7 15:01:59 | 显示全部楼层 |阅读模式
 
  先看看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的回调都差不多。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表