JAVA - 回調機制

參考例子:android的Button OnClickListener接口、《第一行代碼》中的回調例子
 
定義接口
  1. public interface HttpCallbackListener{
  2.     void onFinish(Stringresponse);
  3.     void onError(Exceptione);
  4. }
 
調用接口
  1. publicclassHttpUtil{
  2.     publicstaticvoid sendHttpRequest( finalStringaddress,final HttpCallbackListener listener){
  3.         newThread(newRunnable(){
  4.             @Override
  5.             publicvoid run(){
  6.                 HttpURLConnection connection = null;
  7.                 try{
  8.                     URLurl= newURL(address);
  9.                     connection =(HttpURLConnection)url.openConnection();
  10.                     connection.setRequestMethod("GET");
  11.                     connection.setConnectTimeout(8000);
  12. connection.setReadTimeout(8000);
  13.                     connection.setDoInput(true);
  14.                     connection.setDoOutput(true);
  15.                     InputStreamin= connection.getInputStream();
  16.                     BufferedReaderreader= newBufferedReader(new InputStreamReader(in));
  17.                     StringBuilderresponse= newStringBuilder();
  18.                     String line;
  19.                     while((line = reader.readLine())!= null){
  20.                         response.append(line);
  21.                     }
  22.                     if(listener != null){
  23.                         //回調onFinish()方法
  24.                         listener.onFinish(response.toString());
  25.                     }
  26.                     }catch(Exceptione){
  27.                         if(listener != null){
  28.                             //回調onError()方法
  29.                             listener.onError(e);
  30.                         }
  31.                     }finally{
  32.                         if(connection != null){
  33.                             connection.disconnect();
  34.                         }
  35.             }
  36.         }
  37.     }).start();
  38. }
  39. }
 
實現接口,參數傳入
  1. HttpUtil.sendHttpRequest(address,newHttpCallbackListener(){
  2.     @Override
  3.     publicvoidonFinish(Stringresponse){
  4.     //在這裏根據返回內容執行具體的邏輯
  5.     }
  6.     @Override
  7.     publicvoidonError(Exceptione){
  8.     //在這裏對異常狀況進行處理
  9.     }
  10. });
 
 

 
回調機制適用情景:
回調一般是在兩個不一樣的線程間須要同步的狀況下才出現的(見極客學院項目教程《智能聊天機器人》)
多在框架開發中使用, 回調的接口由具體的應用者自行設計與實現。
 

在三層中,當業務層調用數據層時,是不須要把業務層自身傳遞到數據層的,而且這是一種上層調用下層的關係,好比咱們在用框架的時候,通常直接調用框架提供 的API就能夠了,但回調不一樣,當框架不能知足需求,咱們想讓框架來調用本身的類方法,怎麼作呢?總不至於去修改框架吧。許多優秀的框架提幾乎都供了相關 的接口,咱們只須要實現相關接口,便可完成了註冊,而後在合適的時候讓框架來調用咱們本身的類,還記不記得咱們在使用Struts時,當咱們編寫 Action時,就須要繼承Action類,而後實現execute()方法,在execute()方法中寫我們本身的業務邏輯代碼,完成對用戶請求的處 理。由此能夠猜想,框架和容器中會提供大量的回調接口,以知足個性化的定製。android

即:爲了使咱們寫的函數接近完美,就把一部分功能外包給別人,讓別人個性化定製,至於別人怎麼實現無論,我惟一要作的就是定義好相關接口,這一設計容許了底層代碼調用高層定義的子程序,加強程序靈活性,和反射有着殊途同歸之妙。

 

相關文章
相關標籤/搜索