java中介面實現回撥方法
阿新 • • 發佈:2019-02-13
在學習過程中,看Java原始碼時,經常出現一個詞就是回撥方法,網上檢視別人解釋,五花八門,看得人云裡霧裡,通過揣摩理解,在這裡我來說一說我的理解。
一、回撥方法概念
舉例說明
圖中是這麼個場景,類A實現時要呼叫類B的b(),這時我們會怎麼做呢,我們直接在類A中例項化一個類B物件b,然後呼叫b.b(),我們叫這種呼叫為直接呼叫;但是此時類B中b()的實現,要依賴於類A的a()方法,我們叫這個方法a()為回撥方法,這就是回撥方法概念。
我們發現這種2個類之間相互呼叫,這種設計不利於程式碼維護,因為改了類A的程式碼,可能就要改類B程式碼,相反也一樣。有沒有方法避免這種情況呢?使A、B之間相對獨立,Java中可以採用介面實現回撥,我們來看一看.
二、介面實現回撥
介面定義
public interface CallBack {
public void a();
}
類A定義
public class A implements CallBack {
//持有B的引用
public B bb;
@Override
public void a() {
System.out.print("Hello my name is A");
}
}
類B定義
public class B {
public CallBack callBack;
public B(CallBack callBack){
this .callBack = callBack;
}
public void b(){
//只關注介面,與實現介面的類A隔離、解耦,提高程式碼靈活性,可複用性,
callBack.a();
}
}
我們來測試下
public class Test{
public static void main(String[] args){
A a = new A();
B b = new B(a);
a.bb = b;
a.bb.b();
}
}
三、結論
使用介面實現回撥的方式可以使各模組實現解耦,提高程式碼的靈活性與可複用性。