android的回調方法一直讓我很頭疼,知道很好用但是一直不能理解他的精髓,昨天在開發的時候使用了另一種方式,在這裏總結一下,記錄一下這個感受:
首先建立CallBackClass:
package com.xu.callBackTest;
public class CallBack {
public void doing(InnerClass inner){
inner.doSomething();
}
public interface InnerClass{
public void doSomething();
}
}
package com.xu.callBackTest;
import com.xu.callBackTest.CallBack.InnerClass;
public class Client {
public static void main(String[] args) {
CallBack call = new CallBack();
call.doing(new InnerClass() {
public void doSomething() {
System.out.println("this is callBack ");
}
});
}
}
回調的意義就是在你需要的時候在進行調用相應的方法,在Client中實現了接口,所以在CallBack這個類中就可以使用這個接口的實現,另外一種實現:
import com.xu.callBackTest.CallBack.InnerClass;
public class Client implements InnerClass {
public static void main(String[] args) {
Client client = new Client();
client.noStatic();
}
public void noStatic(){
CallBack call = new CallBack();
call.doing(this);
}
public void doSomething() {
System.out.println("this is callback");
}
}
public class CallBack {
public void doing(InnerClass inner){
inner.doSomething();
}
public interface InnerClass{
public void doSomething();
}
}
這種形式是不是很像android的Linseten事件,這種寫法我覺得在沒有參數的時候,子類就是Client 中可以完全完成doSomething的操作,不需要CallBack類中的方法也能夠完成,所以在CallBack中只需要進行回調就可以了,也就是將Client類的對象傳遞過去就可以了,在寫程序的時候有時候兩個類的關係很遠,要繼承很多次,但是這個類就需要完成一個操作在Client類中,這個時候可以使用一個CallBack類中使用一個靜態的參數,將這個InnerClass對象傳遞進去,就可以實現這個操作;還有另外一種情況,就是CallBack類中需要一個參數進行進行調用InnClass的返回結果:如下:
import com.xu.callBackTest.CallBack.InnerClass;
public class Client implements InnerClass {
public static void main(String[] args) {
Client client = new Client();
client.noStatic();
}
public void noStatic(){
CallBack call = new CallBack();
call.doing(this);
}
public int doSomething() {
//System.out.println("this is callback");
return 1;
}
}
public class CallBack {
public void doing(InnerClass inner){
int i = inner.doSomething();
System.out.println(i + "this is from Client ");
}
public interface InnerClass{
public int doSomething();
}
}
這種形式就是當CallBack 類中需要Client類中的執行結果的時候,通過接口進行數據的傳遞,使用回調方法的時候,就是可以減少參數的傳遞,並且增加了的內聚性,使得一種執行的操作都在一個類中進行,進而達到程序的高內聚低耦合的這種結果。感覺回調是一種很好的代碼寫的方式,可以將一個類中相關方法都可以寫到一個類中,進而,讓這個類就完成一項工作,如果是工具了可以使用靜態的方式進行書寫,可是靜態的方法有好處,但是他一直在內存中存在,所以需要慎用,而這種回調的方式也是一種不錯的選擇,它可以完整的一個類的快速的使用。
昨天感悟很深,學習了。