为什么接口可以实现回调?

don‘t call me ,i will call you,代码怎么就知道什么时机调用呢?

一般框架都有设置 callback/hook 的接口, 当框架内某个事件发生时, 就会调用用户设置的回调.
例如下面的一个简单例子:

public class CallbackTest { public static void mainString args[] throws Exception { // 1. 实例化一个回调逻辑. Callback userCallback = new Callback { @Override public void callString message { System.out.println"Call from framework, message: " + message; } }; // 2. 初始化一个假象的框架, 并设置用户的回调接口. SomeFramework framework = new SomeFrameworkuserCallback; // 3. 启动框架 framework.start; Thread.sleep5000; } interface Callback { void callString message; } static class SomeFramework implements Runnable { Callback userCallback; public SomeFrameworkCallback userCallback { this.userCallback = userCallback; } public void start { new Threadthis.start; } @Override public void run { try { Thread.sleep3000; somethingHappened; } catch InterruptedException e { e.printStackTrace; } } // 4. 当框架内的状态变化时或者是发生了某个事件时, 就调用用户设置的回调接口. private void somethingHappened { userCallback.call"Something happended!"; } }
}

其实就是有点像事件驱动或观察者模式, 框架保存有用户的回调接口, 而这个接口就承担了框架和用户代码沟通的桥梁, 当框架检测到某个事件发生后, 通过此回调接口来通知用户代码.

约定……约定啊……建议你看看观察者模式

比如你给按钮添加一个 action listener

button.addActionListenernew ActionListener { public actionPerformedActionEvent e { // do something }
};

约定按钮在按下的时候会触发 action listener,所以你在加的时候,就已经知道了什么时候会调用。虽然不明白具体是哪个时间点,但是你知道如果发生了什么事情,就会调用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注