Android 回調方法使用

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類中的執行結果的時候,通過接口進行數據的傳遞,使用回調方法的時候,就是可以減少參數的傳遞,並且增加了的內聚性,使得一種執行的操作都在一個類中進行,進而達到程序的高內聚低耦合的這種結果。

感覺回調是一種很好的代碼寫的方式,可以將一個類中相關方法都可以寫到一個類中,進而,讓這個類就完成一項工作,如果是工具了可以使用靜態的方式進行書寫,可是靜態的方法有好處,但是他一直在內存中存在,所以需要慎用,而這種回調的方式也是一種不錯的選擇,它可以完整的一個類的快速的使用。

昨天感悟很深,學習了。


發佈了92 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章