1. 程式人生 > >對於介面回撥的簡單理解

對於介面回撥的簡單理解

介面回撥在實際的應用中可以說是無處不在的,比方說你向伺服器請求一個數據,請求結束的時候你需要在介面上進行一個顯示,當然你可以選擇一直等待,但是這樣做效率實在是太低,並如果你在android 的Activity中等待的話很有可能會導致程式崩潰。這時候你就需要介面回調了。

下面就來簡單介紹一下介面回撥的簡單概念,

構成介面回撥有以下的幾個要素:
整個機制構成三要素就是:我(客戶端)你(服務端),約定(介面)
Java 中沒有函式指標這一說,因為java沒有指標,但是並不代表著它不會使用這個功能。事實上,引用就是實現了指標的功能。
回撥方法就是一個通過方法指標來呼叫的方法。如果我將這個方法的指標(地址,引用)通過形參傳遞到另一個類的某個方法裡,那麼當這個類呼叫該方法裡面我所傳入的指標時,就能呼叫我這邊的方法。
主要步驟:

    * 定義介面 Callback ,包含回撥方法 callback();
    * 服務端提供註冊的方法,並設定在某個條件下會回撥介面方法;
    * 客戶端提供介面的實現方法,並註冊到服務端,把方法地址傳進去。

先來看一個最基本的回撥:

public class Me
{
       public Me(You you)
       {
              // TODO Auto-generated constructor stub
              you.dosth(this,"整體公司檔案");
              
       }
       public void doresult(String result)
       {
              System.out.println("事情"+result);
       }
       
}

public class You {
       public void dosth(Me me, String task) {
              // TODO Auto-generated method stub
              System.out.println("你要我做"+task);
              String result="做完,搞定";
              me.doresult(result);
       }
}

public class Test {
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              You you=new You();
              new Me(you);
       }
}


首先me類呼叫了you類中的dosth()方法,you類再在dosth()方法中回撥me類中的doresult()方法。
這時候如果除了me還有其他的人向你發出請求,那麼這時候就需要定義一個回撥介面,讓所有發出請求的類都實現這個介面。
 
public interface Bound {
       public void doresult(String s);
}

public class Me implements Bound
{
       public Me(You you)
       {
              // TODO Auto-generated constructor stub
              you.dosth(this,"整體公司檔案");
              
       }
       public void doresult(String result)
       {
              System.out.println("事情"+result);
       }
       
}

public class You {
       public void dosth(Bound me, String task) {
              // TODO Auto-generated method stub
              System.out.println("你要我做"+task);
              String result="做完,搞定";
              me.doresult(result);
       }
}

public class Test {
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              You you=new You();
              new Me(you);
       }
}



說到底回撥思想還是用到了java中多型的概念難過