Java回撥機制與OOP思想
阿新 • • 發佈:2019-01-29
結合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類能問問題,然後逛街等待結果
定義B類,擁有回答問題的方法,但此方法需要將結果傳出來的引數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); } }
最後在顯示這個事件的具體形式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("怎樣讓我變得更帥?");
}
}