翻翻过去那场雪
一般框架都有设置 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!"); } }}其实就是有点像事件驱动或观察者模式, 框架保存有用户的回调接口, 而这个接口就承担了框架和用户代码沟通的桥梁, 当框架检测到某个事件发生后, 通过此回调接口来通知用户代码.