天天记录 - Java回调实现
来源:互联网 发布:766冒险岛数据库没有了 编辑:程序博客网 时间:2024/05/17 07:16
1) 什么是回调?(What)
精妙比喻:我把手机号码给你,你通过手机号码联系我。
具体解释:
我把我的手机号码给你,你通过电话号码打电话 联系我。
我把我的手机号码给你,你通过电话号码发短信 联系我。
共同的部分:
我把我的手机号码给你,你通过电话号码(****)联系我。
不同的部分
(****)每次在使用的时候,选择是打电话或是发短信。
2) 使用java如何实现回调?(How)
通常使用java语言实现有两种方式:使用接口支持回调 和 使用继承支持回调。
此示例使用接口支持回调方式
/** * 包含有回调方法的类 */ public class CallMe {public void call(CallBack callBack){ // 参数是CallBack接口类型System.out.print("我把我的手机号码给你,你通过电话号码");callBack.execute(); // 回调,不同部分(****),即打电话 OR 发短信System.out.print("联系我!");}}/** * 回调接口 */ interface CallBack {void execute();}
/** * 使用回调的类 * “打电话” */public class CallUp {public static void main(String[] args) {CallMe callMe = new CallMe();callMe.call(new CallBack(){public void execute(){System.out.print(" 打电话 ");}});}} /* !!! OutPut : ~我把我的手机号码给你,你通过电话号码 打电话 联系我! */
/** * “发短信” */public class SendMessage {public static void main(String[] args) {CallMe callMe = new CallMe();// 创建一个实现CallBack的匿名内部类// 通过new表达式返回的引用自动向上转型为对CallBack的引用。CallBack callBack = new CallBack(){public void execute(){System.out.print(" 发短信 ");}};callMe.call(callBack);}} // !!! OutPut : ~
3) 回调都做了什么?
将变动与不变的代码分离,变动的代码在每次使用时确认。
4) 什么情况使用回调?为什么要使用回调? (Why)
步骤固定,但有一部分内容只有在使用的时候才能知道。
5)不用回调,实现同样同能还有其他方式吗?(Why)
注: java回调具体名字,有的说是java回调函数,java回调机制(不知道这种说法对不对),本文统一使用“java回调”。
调用方法的方式
一 同步调用 : 是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用
二 回调调用 : 是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口
三 异步调用 : 是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)
参考资料:
回调Java代码实现
http://kidult.iteye.com/blog/148982
WiKi Callback
http://en.wikipedia.org/wiki/Callback_%28computer_programming%29
- 天天记录 - Java回调实现
- 天天记录
- 天天记录 - Java 精确计算避免使用float和double
- 天天记录 - @ViewDebug.ExportedProperty
- 天天记录 - Android AsyncTask 缺陷
- 天天记录 - 一个onFocusChanged问题
- 天天记录 - Ubuntu个人常用软件
- 天天记录 - Android PopupWindow例子
- 天天记录 - Java String如何分配内存空间,分析Java堆与栈
- 天天记录 - Android 使用view.ScrollBy实现View随手指移动
- 天天记录 - Chrome安装问题记录
- 天天练习java
- java天天练2
- java天天练
- 天天记录 - Android焦点相关知识学习
- 天天记录 - ListView下拉刷新原理
- 天天记录 - Android ListView加载图片
- 天天记录 - 使用VelocityTracker计算滑动速率
- RamDisk 学习
- JSP连接ACCESS数据库方法
- 聊天,如何制造话题
- Win7 64位 IIS未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项
- DOS命令查看端口使用情况
- 天天记录 - Java回调实现
- 游戏研发与风险控制
- 2013年10大网页设计趋势
- LoadRunner 11 安装及破解
- http协议学习
- linux内核中的文件描述符(四)--fd的分配--get_unused_fd
- Redis使用场景
- Windows Read Serial Support [php_serial.class.php ]
- 网站收藏