回调
来源:互联网 发布:网络运维管理制度 编辑:程序博客网 时间:2024/05/16 09:58
摘自于百度:
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础。
下面来说个故事:
我昨晚又熬夜写代码了,今天上课想睡觉了,但是我怕老师来了怪我,所以我告诉同桌小黑来了请叫我。这里有两个对象,我和同桌小黑。我具有三个方法,①想睡觉了②开始睡觉③正在睡觉。小黑是个傻X,什么都不会,我定义了一个接口(接口里面有叫醒我的方法),让小黑去实现,然后小黑就具有了叫醒我的方法。
package com.test.sleep;public class Me {public void startSleep() {System.out.println("开始睡觉了");}public void wantTosleep() {System.out.println("想睡觉了");}public void stopsleep() {System.out.println("停止睡觉");}}
这是一个监听器,待会要给我的同桌赋值这个监听器,告诉他怎么叫我醒来,毕竟他是个傻X。怎么黑同学合适吗?
package com.test.sleep;public interface CallSbListener {/** * 叫醒我睡觉的方法 * @param teacherName */void callMeStopSleep(String teacherName);}
这是我的同桌,他有一个监听器。也可以在这里直接实现这个监听器。
package com.test.sleep;public class ClassMate {CallSbListener mCallSbListener;public ClassMate() {super();}public ClassMate(CallSbListener mCallSbListener) {super();this.mCallSbListener = mCallSbListener;}public void callMeStopSleep(String teacherName){mCallSbListener.callMeStopSleep(teacherName);}/** * 赋值listener * @param mCallSbListener */public void setmCallSbListener(CallSbListener mCallSbListener) {this.mCallSbListener = mCallSbListener;}}
下面是测试类:
package com.test.sleep;public class Test {public static void main(String[] args) {final Me me = new Me();me.wantTosleep();System.out.println("找同桌商量");ClassMate classMate = new ClassMate();classMate.setmCallSbListener(new CallSbListener() {@Overridepublic void callMeStopSleep(String teacherName) {System.out.println(teacherName+"来了...");me.stopsleep();}});System.out.println("商量好了...");me.startSleep();// 模拟伍老师来了.try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}classMate.callMeStopSleep("王老师");}}
new出来一个同桌对象,给他设置一个监听器,监听器的方法中实现了叫醒我的方法。
0 0
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调
- 回调?
- 回调
- 平时遇到的问题记录
- scrapy学习
- 别说你会AFNetworking3.0/NSURLSession
- C++中字符串字面值和字符相加
- linux定时器总结
- 回调
- 3D版的TagView,效果很赞
- python---matplotlib安装、networkx的使用
- Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.internal.LoggedErrorExcept
- HTML5 META标签 标准写法
- Servlet学习和汇总
- 百万数据查询优化
- 如何向外行解释产品经理频繁更改需求为什么会令程序员烦恼?
- poj2983Is the Information Reliable?——差分约束