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

Java 回呼函數機制詳解與實作範例:介面導向設計模式

     編輯:Java 相關知識

什麼是回呼函數?

「好萊塢原則」:**Don't call us, we'll call you.** 高層模組定義介面,低層模組在特定時機呼叫高層提供的實作。Java 無指標,透過介面實現回呼。

核心角色

  • Callback Interface:定義回呼方法契約。
  • Caller (低層/服務提供者):持有介面引用,在適當時機呼叫。
  • Callee (高層/使用者):實作介面,傳遞實例給 Caller。

完整程式碼範例

1. 定義回呼介面

public interface CallBackInterface {
    void doSome();
    void executeMethod();
}

2. 服務提供者 (李四的程式碼)

public class MethodB {
    public double getTime(CallBackInterface callback) {
        long start = System.currentTimeMillis();
        callback.executeMethod(); // 回呼執行
        long end = System.currentTimeMillis();
        System.out.println("cost time=" + (end - start));
        return end - start;
    }
}

3. 使用者 (張三的程式碼)

public class MethodA {
    public static void main(String[] args) {
        MethodB b = new MethodB();
        double d = b.getTime(new CallBackInterface() {
            @Override
            public void executeMethod() {
                new MethodA().testMethod(); // 實際業務邏輯
            }
            @Override
            public void doSome() {}
        });
        System.out.println("d=" + d);
    }

    public void testMethod() {
        for (int i = 0; i < 10000; i++) System.out.print("");
    }
}

應用場景

  • 非同步處理:AJAX、事件驅動 (ActionListener)、多執行緒回調 (Future/CompletionStage)。
  • 層級解耦:框架定義介面,應用層實作 (如 Servlet Filter、Spring AOP)。
  • 多重繼承替代:Java 單繼承限制下,內部類實作不同介面實現多型。

關鍵點總結

  1. 介面定義「要做什麼」,實作類決定「怎麼做」。
  2. Caller 不需知道 Callee 具體類別,僅依賴介面。
  3. 配合匿名內部類或 Lambda (Java 8+) 可極度簡化代碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved