WEB开发网
开发学院网页设计JavaScript java和javascript中的回调函数 阅读

java和javascript中的回调函数

 2009-01-15 20:03:33 来源:WEB开发网   
核心提示:先看看java中的回调函数,java中很多模式和它类似,java和javascript中的回调函数,有访问者,观察者等模式,声明:JavaEye文章版权属于作者,受法律保护,ioc等也有这个类似的原理, Java代码 public class Test { /** * @param args */

先看看java中的回调函数,java中很多模式和它类似,有访问者,观察者等模式。ioc等也有这个类似的原理。

 

Java代码
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("回调后....."); 
  } 
 

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("回调后.....");
  }

}  输出结果为:

Java代码
回调前..... 
正在执行.... 
回调后..... 

回调前.....
正在执行....
回调后.....这里充分的体现了不是我来调用你,而是你来调用我。

这里的我就是“doExecute”,你就是"execute"

回调可以用在哪些地方呢?

1,比如著名的ioc的事务处理就是这样的,每个方法的事务处理都是一样的,都是些开始一个事务,用try包住,等等,所以就可以不管他们,变的只是要执行方法的不同,比如存储,删除,查询什么的。

2,可以减少写类,一个接口,可以有很多的实现类,在回调里面,就成了匿名的了。著名的jive里面DatabaSEObjectFactory 就是这个用法。

Java代码
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);   
}  

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里面的:

Js代码
function Test() 
{ 
   var self=this; 
   this.func1=function() 
  { 
   self.test2(function (){ alert('正在执行');}) 
  } 
} 
 
Test.prototype.test2=function(func) 
{ 
   alert("回调前做些东西"); 
   if(func) 
   func(); 
   alert("回调后做些东西"); 

function Test()
{
 var self=this;
 this.func1=function()
  {
 self.test2(function (){ alert('正在执行');})
  }
}

Test.prototype.test2=function(func)
{
 alert("回调前做些东西");
 if(func)
  func();
  alert("回调后做些东西");
}
 然后,在html里面:

Html代码
<html> 
   <head> 
     <script type=text/Javascript src="1.js"> 
     </script> 
     <script> 
       new Test().func1(); 
     </script> 
   </head> 
   <body> 
   </body> 
</html> 

<html>
   <head>
     <script type=text/javascript src="1.js">
     </script>
     <script>
       new Test().func1();
     </script>
   </head>
   <body>
   </body>
</html>
 java和javascript的回调都差不多。

声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

Tags:java javascript 回调

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接