1. 程式人生 > >Java回撥機制與OOP思想

Java回撥機制與OOP思想

結合Java的回撥機制總結OPP的思想,因為Java是自學的,開始抽象類和介面的概念都能理解,別人用也能懂,但等到自己設計的時候總是很生疏,等到做Android時,不停的回撥,回撥,回撥。。。看看原始碼,一點點的就有了理解,就此來總結一下,有不對的地方還請多指出評批。

語言是用來交談的,更統概的說是來描述一件事情的邏輯,OPP的理念則是全面的抽象了事情的邏輯,忽略了機器,環境等,所以OPP大多來設計應用,像C語言溝通硬體的則用來控制硬體對外提供介面。

用大家都提的一個回撥案例,打電話。

張三有一個問題,"怎樣讓我變得更帥?",自己沒找到方法,於是張三打電話問趙四,趙四此時在工作,一聽,這問題真難,得好好想想,趙四就告訴張三:問題太難,容我多想想,想到了再回電話給你。於是趙四一邊在工作一邊想辦法,張三也不能傻等著,就出去逛街了,等著趙四想到方法call他。趙四千想萬想,終於找到了辦法,於是回電話告訴張三:“使用江湖快要失傳的絕學,還我漂漂拳”。

將上述抽象的概括為:一個人A問另一個人B問題,A首先要有兩個屬於,一是A要問問題,二是A要有B的號碼;B有一個屬性,想出問題並回電A,於是A還得留下號碼等B想到問題之後回電。

首先張三得留下一個方式讓別人告訴他結果,這樣才逛街和知道結果兩不誤,於是

//這是一個介面,用來得到答案
public interface CallBack {
	//answer為答案
	void tellAnswer(String answer);
}
接著定義A類,A類得有B的聯絡方式,A類能問問題,然後逛街等待結果
public class A implements CallBack {

	private B b;

	// A有B的聯絡方式
	public A(B b) {
		this.b = b;
	}

	// A有問題需要問
	public void askQuestion(String question) {
		// 新執行緒問問題,不能耽誤逛街
		new Thread(new Runnable() {

			@Override
			public void run() {
				//向B的回答問題方法中傳入問題和告知B是誰詢問
				b.replyQuestion(question, A.this);
			}
		}).start();
		// 接著就去逛街
		shopping();

	}

	// A要逛街
	public void shopping() {
	}

	@Override
	public void tellAnswer(String answer) {
		// TODO Auto-generated method stub
		System.out.println("B告訴A變帥的方法為:" + answer);
	}

}
定義B類,擁有回答問題的方法,但此方法需要將結果傳出來的引數
public class B {

	public String answer;

	// 回答問題,首先要知道問題,然後回傳答案
	public void replyQuestion(String question, CallBack callBack) {

		for (int i = 0; i < 100; i++) {
			// 對question進行反覆思考
			answer = "還我漂漂拳";
		}
		// 通過callBack,將思考得到的結果傳出去
		callBack.tellAnswer(answer);
	}

}
最後在顯示這個事件的具體形式
public class Thing {

	public static void main(String[] args) {
		// B的一個例項,趙四
		B zhaosi = new B();
		// A的一個例項,張三
		A zhangsan = new A(zhaosi);
		// 張三問問題
		zhangsan.askQuestion("怎樣讓我變得更帥?");
	}

}