首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 回調機制徹底講透:接口模擬函數指針、多態實現解耦與 Android 實戰模式

     編輯:Java 相關知識

Java 無函數指針,回調通過接口 + 多態模擬。本文從 C/C++ 函數指針、C# 委托對比切入,層層遞進構建 Java 回調模型:定義接口 → 實現類 → 接口引用持有實現對象 → 目標方法調用接口方法,並展示帶事件觸發條件的 Controller 模式,直擊 Android OnClickListener、Runnable 等核心場景。

為什麼需要回調?

將「做什麼」與「何時做」解耦。被調用者不關心具體邏輯,只在特定時機觸發契約方法,實現邏輯可插拔。

三步構建 Java 回調

  1. 定義契約接口:
    interface Callback { void onEvent(); }
  2. 提供實現:
    class MyHandler implements Callback {
        public void onEvent() { System.out.println("handle"); }
    }
  3. 註冊與觸發:
    class Invoker {
        private Callback cb;
        public Invoker(Callback cb) { this.cb = cb; }
        public void trigger() { if (cb != null) cb.onEvent(); }
    }

進階:帶條件觸發的 Controller 模式

class Controller {
    private Callback callback;
    private boolean eventHappened;
    public Controller(Callback cb) { this.callback = cb; }
    public void doSomething() {
        if (eventHappened) callback.onEvent();
    }
}

此處若直接依賴 MyHandler 而非接口,則退化為硬編碼,喪失擴展性。

匿名內部類簡化註冊

new Controller(new Callback() {
    @Override public void onEvent() { System.out.println("anonymous"); }
}).doSomething();

Android 實戰映射

  • View.setOnClickListener(new OnClickListener() { ... }) → 接口 OnClickListener、實現類匿名內部類、觸發點在 View.performClick()。
  • new Thread(new Runnable() { ... }).start() → 接口 Runnable、線程啟動時回調 run()。

核心設計原則

  1. 契約先行: 接口定義「做什麼」,實現類決定「怎麼做」。
  2. 依賴倒置: 高層模塊依賴抽象接口,不依賴具體實現。
  3. 單一職責: 觸發邏輯與業務邏輯分離,便於測試與復用。

掌握此模式,即掌握了 Java 事件驅動、異步回調、插件化架構的基因密碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved