java 回调机制小结

比较简洁的说明回调机制。。。。

 

回调的通俗理解:你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你 会把你的电话号码告诉他,让他解决之后打电话通知你。即回调就是体现在你的同学又反过来拨打你的号码。 拿这个例子类比Ajax中的回调机制以及Spring中HibernateTemplate用到的回调+模板机制,可以更容易地理解回调机制。

          Ajax代码:

Java代码
  1. function test{  
  2.    if (window.ActiveXObject){  
  3.       xmlHttp = new  ActiveXObject( "Microsoft.XMLHTTP" );  
  4.    }else   if (window.XMLHttpRequest){  
  5.       xmlHttp = new  XMLHttpRequest();  
  6.    }  
  7.    xmlHttp.onreadystatechange = callback;  
  8.    xmlHttp.open(…);  
  9.    xmlHttp.send(null );  
  10. }    
  11.   
  12. function callback{ }     
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.onreadystatechange = callback 就是表示在state改变时调用callback函数,而这个callback就是一个回调函数。

类比: xmlHttp发出请求就相当于你打电话给你的同学,xmlHttp不知道state何时发生变化,就相当于你不知道你的同学何时能解决问题。Callback函数就相当于你的电话号码,
state发生变化时会调用callback函数,同样你的同学解决问题后会打电话通知你。


Spring中HibernateTemplate的回调机制与模板方法

HibernateTemplaet的源码很复杂,我们可以写一段简单的代码来模拟一下:

Java代码
  1. interface  CallBack{   
  2.     public   void  doCRUD();   
  3. }  
  4.   
  5. public   class  HibernateTemplate {   
  6.       
  7.     public   void  execute(CallBack action){  
  8.         getConnection();  
  9.         action.doCRUD();  
  10.         releaseConnection();  
  11.     }  
  12.    
  13.     public   void  add(){  
  14.          execute(new  CallBack(){  
  15.             public   void  doCRUD(){  
  16.                 System.out.println("执行add操作..." );  
  17.             }  
  18.          });  
  19.     }  
  20.       
  21.     public   void  delete(){  
  22.          execute(new  CallBack(){  
  23.             public   void  doCRUD(){  
  24.                 System.out.println("执行delete操作..." );  
  25.             }  
  26.          });  
  27.     }   
  28.   
  29.     public   void  getConnection(){  
  30.         System.out.println("获得连接..." );  
  31.     }  
  32.       
  33.     public   void  releaseConnection(){  
  34.         System.out.println("释放连接..." );  
  35.     }  
  36.       
  37. }  
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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值