本文共 2072 字,大约阅读时间需要 6 分钟。
在Java核心技术I中接触到了回调这个名词,在这里整理下思路。
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。
一个员工做完了手头的工作,发送消息通知,得到回复才可以走人(笑了)。
/** * 回调模式-回调接口类 */public interface Work { void goHome(String content);}
/** * 回调模式-员工工作类,实现回调接口类 */public class EmployeeWork implements Work{ /** * 异步调用,发送完成工作的消息 * * @param content 消息 * @param message 消息处理类 */ public void complete(final String content, final Message message){ //创建线程 new Thread(() -> { //将员工工作的引用传入消息处理的方法 message.ask(content, EmployeeWork.this); }).start(); waiting(); } /** * 准备回家 */ public void waiting() { System.out.println("准备回家"); } /** * 被回调方法,得到消息可以回家了 * @param content */ @Override public void goHome(String content) { System.out.println("得到通知," + content + "工作,可以下班了"); }}
/** * 回调模式-消息处理类,回调方法 */public class Message { /** * 处理消息并回调 * * @param content 消息 * @param work 回调接口,为了安全向上转型 */ public void ask(String content, Work work) { if (content.contains("完成")) { System.out.println("收到" + content + "的通知"); //回调方法 work.goHome(content); } }}
public class CallBackTest { public static void main(String[] args) { EmployeeWork employeeWork = new EmployeeWork(); String content = "完成微信推送"; employeeWork.complete(content, new Message()); }}
输出结果如下:
准备回家收到完成微信推送的通知得到通知,完成微信推送工作,可以下班了
以上是异步回调的简单示例,回调方法最大的优势在于就在于异步回调,这是其最被广为使用的原因。
参考文章:
参考博客:
转载地址:http://vugvz.baihongyu.com/