don‘t call me ,i will call you,代码怎么就知道什么时机调用呢?
光阴似箭催人老,日月如移越少年。
一般框架都有設定 callback/hook 的介面, 當框架內某個事件發生時, 就會呼叫使用者設定的回呼.例如下面的一個簡單範例:
public class CallbackTest { public static void main(String args[]) throws Exception { // 1. 实例化一个回调逻辑. Callback userCallback = new Callback() { @Override public void call(String message) { System.out.println("Call from framework, message: " + message); } }; // 2. 初始化一个假象的框架, 并设置用户的回调接口. SomeFramework framework = new SomeFramework(userCallback); // 3. 启动框架 framework.start(); Thread.sleep(5000); } interface Callback { void call(String message); } static class SomeFramework implements Runnable { Callback userCallback; public SomeFramework(Callback userCallback) { this.userCallback = userCallback; } public void start() { new Thread(this).start(); } @Override public void run() { try { Thread.sleep(3000); somethingHappened(); } catch (InterruptedException e) { e.printStackTrace(); } } // 4. 当框架内的状态变化时或者是发生了某个事件时, 就调用用户设置的回调接口. private void somethingHappened() { userCallback.call("Something happended!"); } } }
其實就是有點像事件驅動或觀察者模式, 框架保存有用戶的回調接口, 而這個接口就承擔了框架和用戶代碼溝通的橋樑, 當框架檢測到某個事件發生後, 通過此回調接口來通知使用者代碼.
約定…約定啊…建議你看看觀察者模式
例如你給按鈕加一個 action listener
button.addActionListener(new ActionListener() { public actionPerformed(ActionEvent e) { // do something } });
約定按鈕在按下的時候會觸發 action listener,所以你在加的時候,就已經知道了什麼時候會呼叫。雖然不明白具體是哪個時間點,但是你知道如果發生了什麼事情,就會呼叫。
一般框架都有設定 callback/hook 的介面, 當框架內某個事件發生時, 就會呼叫使用者設定的回呼.
例如下面的一個簡單範例:
其實就是有點像事件驅動或觀察者模式, 框架保存有用戶的回調接口, 而這個接口就承擔了框架和用戶代碼溝通的橋樑, 當框架檢測到某個事件發生後, 通過此回調接口來通知使用者代碼.
約定…約定啊…建議你看看觀察者模式
例如你給按鈕加一個 action listener
約定按鈕在按下的時候會觸發 action listener,所以你在加的時候,就已經知道了什麼時候會呼叫。雖然不明白具體是哪個時間點,但是你知道如果發生了什麼事情,就會呼叫。