回调函数(从别的地方偷的)

 今天看了一个回调函数的例子 觉得解释的不错,拿来保留着:

他说 回调函数 就是 你找同学办事,但不知 他什么时候有空,就打电话 给他告诉他,当他做完事情,再打电话给你。

1、ajax 回调函数解释:

 

function test{
   if(window.ActiveXObject){
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
   }else if(window.XMLHttpRequest){
      xmlHttp = new XMLHttpRequest();
   }
   xmlHttp.onreadystatechange = callback;
   xmlHttp.open(…);
   xmlHttp.send(null);

function callback{ }  

 

 

xmlHttp 发出请求 ==========你打电话给你同学

 xmlHttp.onreadystatechange = callback==================状态改变 即你同学完成事情,打电话给你。

 

 

2、HibernateTemplate 的例子:

 

interface CallBack{
 public void doCRUD();
}

public class HibernateTemplate {
 
 public void execute(CallBack action){
  getConnection();
  action.doCRUD();
  releaseConnection();
 }
 
 public void add(){
   execute(new CallBack(){
   public void doCRUD(){
    System.out.println("执行add操作...");
   }
   });
 }
 
 public void delete(){
   execute(new CallBack(){
   public void doCRUD(){
    System.out.println("执行delete操作...");
   }
   });
 }

 public void getConnection(){
  System.out.println("获得连接...");
 }
 
 public void releaseConnection(){
  System.out.println("释放连接...");
 }
 
}

 

execute方法可以体现出模板模式。以add方法为例,调用execute方法就相当于你打电话给你的同学,但是你的同学说需要时间,就像execute方法需要首先获得连接一样,于是你把CallBack匿名类传递给它,在它获得连接之后会执行你的add操作,这就相当于你把电话号码告诉你的同学,他解决问题之后再打给你一样。当然这种通俗理解不能很好地体现出Spring中的Callback模式和Template模式合用的简单与灵活,这里只是利于理解一点。

3、还有一个java 例子:

 

public class CallBackTest {
  public static void main(String[] args) {
     new CallBackTest().doExecute(new CallBack(){
      public void execute() {
       System.out.println("正在执行....");
      }
     });
  }
  private void doExecute(CallBack callBack) {
    System.out.println("回调前.....");
    callBack.execute();
    System.out.println("回调后.....");
  }
}
 class CallBack{
   public void execute(){
   }
}

 

4、一个js的例子:

 

  <script type="text/javascript">
function Test(){  
    var self=this;  
    this.func1=function(){self.test2(function (){ alert('alert');})};  
}  
Test.prototype.test2=function(func){  
     alert("before");    
     func();  
     alert("end");  
}

new Test().func1(); 
  </script>

 

转载于:https://www.cnblogs.com/sunxiangfu/archive/2010/08/24/4261124.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值