Android or Java的回调粗俗理解 这才是最通俗易懂的
不如自己写一个东西,回头自己看着舒服
回调函数:定义自己百度
干嘛的?
场景就是事务A执行一个函数时,函数内部调用了事务B中的一个方法,且接下来事务A的继续要依赖于B的方法的结果返回。
FUCK,绕不绕?!网上一搜一大把这种说辞的。我也觉得绕。
我来个通俗易懂的。
热恋中的男女,晚上吃完饭看完电影要各回各家各找各妈的时候。
男孩说,虽然我们没能去啪啪啪,但是你到家了要告诉我一声,我给你提个要求,就是到家后通知我一声就好,我好安心睡觉。
场景描述完毕,现在抽象数据模型。
这就是回调的使用,男孩要知道女孩回家的状态,但是女孩什么时候才能到家,是否安全到家他都不知道也没办法掌控,但是他和女孩说好了一个约定,就是到家后给我一个结果就好了。
什么狗屁的所谓的回调,不如说对某事件的状态监听,想要监听谁就给谁安插一个监听器进去,监听器是干啥的那就看要看主动监听的对象的意思了。
上面这个场景就是男生要监听女孩回家的状态,再通俗一点就是我是男生,我给女孩一个手机,到家了给我用这个手机联系我,是发信息还是打电话那就看我这个手机支持什么具体操作了。
那么最后抽象出来的模型就是
1男孩 class Boy
2女孩 class Girl
3手机 监听器 回调函数,继续抽象就是一个接口interface PhoneCallBackListener,回调函数总是要做点事情的嘛。
好了,下面我们就要实现代码了,没有从浅到深的啰嗦,直接用项目中实际的操作展示。
1),首先我们定义接口,回家有很多中状态,就好比项目中业务是实现结果有成功失败和超时等
回家有安全到家 危险状态 又出去high三个状态
public interface PhoneCallBackListener {
public void onSafe(String info);
public void onDanger(String info);
public void onGoOut(String info);
}
监听器(手机)有三个方法,到家的状态认为有三种,哪个发生了执行哪个回调
2),男孩要对女孩进行监听,怎么监听男孩说的算,所以接口要由男孩实现,这个逻辑很好理解。
public class Boy implements PhoneCallBackListener{
public Boy(){
System.out.println("创建一个男孩");
}
@Override
public void onSafe(String info) {
// TODO Auto-generated method stub
System.out.println("Boy类中的接口实现:女孩告诉我》"+info);
}
@Override
public void onDanger(String info) {
// TODO Auto-generated method stub
System.out.println("Boy类中的接口实现::女孩告诉我》"+info);
}
@Override
public void onGoOut(String info) {
// TODO Auto-generated method stub
System.out.println("Boy类中的接口实现::女孩告诉我》"+info);
}
}
3)接下来创建一个女孩,女孩也同意男孩要求,说我听你的,到家了跟你说一声。 所以女孩要有能拿电话的能力
public class Girl{
public Girl(){
System.out.println("创建一个女孩");
}
//女孩要有拿电话的能力(能够接受男孩给的电话)
private PhoneCallBackListener phone;
void setPhoneCallBackListener(PhoneCallBackListener phone){
if(phone != null){
System.out.println("我是女孩,我接受了男孩给我的电话");
this.phone = phone;
}
}
//女孩到家用电话告知自己的情况
void callBack(int hours){
if(hours>2){
phone.onDanger("两个小时还没到家,有紧急情况");
}else if((hours<=2) && (hours >=1)){
phone.onGoOut("到家了又有事情外出一下");
}else{
phone.onSafe("安全到家!");
}
}
}
三个具体的类都抽象出来也都实现了,下面具体实测一下效果。
我实现一个面函数
public class MainCallBack{
public static void main(String[] args) {
Boy boy = new Boy();
Girl girl = new Girl();
//写法1,直接new接口
System.out.println("写法1,直接new接口");
girl.setPhoneCallBackListener(new PhoneCallBackListener() {
@Override
public void onSafe(String info) {
// TODO Auto-generated method stub
System.out.println("男孩让我到家后告诉他,我已安全到家");
}
@Override
public void onGoOut(String info) {
// TODO Auto-generated method stub
System.out.println("男孩让我到家后告诉他,我又出去了");
}
@Override
public void onDanger(String info) {
// TODO Auto-generated method stub
System.out.println("男孩让我到家后告诉他,我有紧急情况");
}
});
girl.callBack(1);
//写法2,将boy传进去(接口实例对象的引用)
System.out.println("写法2,将boy传进去(接口实例对象的引用)");
girl.setPhoneCallBackListener(boy);
girl.callBack(3);
System.out.println("main方法结束");
}
}
看输出结果
创建一个男孩
创建一个女孩
写法1,直接new接口
我是女孩,我接受了男孩给我的电话
男孩让我到家后告诉他,我又出去了
写法2,将boy传进去(接口实例对象的引用)
我是女孩,我接受了男孩给我的电话
Boy类中的接口实现::女孩告诉我》两个小时还没到家,有紧急情况
main方法结束
总结:想要监听谁(某事务的运行结果),就给谁安插一个监听器(接口的实例对象),在这个类中私有一个接口引用,并完成一个“set”方法赋值。当事务执行完毕,执行接口里面对应的方法(回调),就能将监听结果反馈给主动监听的对象。主动监听的对象去实现接口的方法。
boy是主动监听的对象,由boy实现接口
girl是被监听的对象,要安插一个接口的引用在里面,并在girl里完成“set”方法
girl完成自己的事情后,执行接口方法进行回调
逻辑就是这么个逻辑
本来在新浪里面写完了,但是排版实在垃圾,突然想到好像自己有个博客园的账号,还能登陆进来搬家来这边。
没有自己好好排版,先这么弄吧,博客园处女作。理解不对勿喷,请指正。
Android or Java的回调粗俗理解 这才是最通俗易懂的的更多相关文章
- [转载] 深入理解Android之Java虚拟机Dalvik
本文转载自: http://blog.csdn.net/innost/article/details/50377905 一.背景 这个选题很大,但并不是一开始就有这么高大上的追求.最初之时,只是源于对 ...
- JAVA回调函数ANDROID中典型的回调地方
在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...
- Java学习之Java接口回调理解
Java接口回调 在Java学习中有个比较重要的知识点,就是今天我们要讲的接口回调.接口回调的理解如果解释起来会比较抽象,我一般喜欢用一个或几个经典的例子来帮助加深理解. 举例:老板分派给员工做事,员 ...
- 深入理解Android之Java虚拟机Dalvik
一.背景 这个选题非常大,但并非一開始就有这么高大上的追求. 最初之时,仅仅是源于对Xposed的好奇.Xposed差点儿是定制ROM的神器软件技术架构或者说方法了. 它究竟是怎么实现呢?我本意就是想 ...
- Android中的接口回调技术
Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...
- 谈谈我对Java中CallBack的理解
谈谈我对Java中CallBack的理解 http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallBack是回 ...
- 浅析android系统设计中的回调思想
一.为何写作本文 在慢慢深入接触android开发的过程中,我越来越发现android中(至少应用曾的开发)用到了很多回调的思想.比如activity的生命周期,fragment的生命周期,皆是回调 ...
- [深入理解Android卷一全文-第八章]深入理解Surface系统
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版.而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- [深入理解Android卷一全文-第十章]深入理解MediaScanner
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断.所以我将在CSDN博客中全文转发这两本书的全部内容. ...
随机推荐
- Android 源码解析 之 setContentView
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41894125,本文出自:[张鸿洋的博客] 大家在平时的开发中,对于setCont ...
- BigInteger类及方法应用
注:以下内容来自传智播客(itcast)老师授课 BigInteger 可以让超过Integer范围内的数据进行运算 构造方法 public BigInteger(String val) 成员方法 p ...
- compare.go
package clientv3 import ( pb "github.com/coreos/etcd/etcdserver/etcdserverpb" ) type C ...
- BZOJ4944 泳池 解题报告
题目描述 有一个 \(n\) 行无穷列的海域,每个格子有 \(q\) 的概率安全, \(1-q\) 的概率不安全.从中框出一个面积最大的矩形,满足以下两个条件: (1)矩形内的格子均安全: (2)矩形 ...
- ZOJ_2314_Reactor Cooling_有上下界可行流模板
ZOJ_2314_Reactor Cooling_有上下界可行流模板 The terrorist group leaded by a well known international terroris ...
- 转载iOS开发中常见的警告及错误
iOS警告收录及科学快速的消除方法 前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作. ...
- SOLID原则(OOD&OOP)
SOLID原则是面向对象编程和面向对象设计的头五大原则.学习及应用这五大原则可以构建一个易于维护和扩展的应用程序,我们一起看看到底是那五大原则. S--单一责任原则(SRP) --Single Res ...
- c#Socket服务器与客户端的开发(1)
上个项目中用到了Socket通讯,项目中直接借助SuperSocket实现,但是我觉得这毕竟是一个我没接触过的东西,所以也顺便学习了一下原生socket的使用,做了一个socket服务器与客户端的开发 ...
- Arduino入门笔记(6):温度传感器及感温杯实验
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino板 :https://item.taob ...
- 使用vue开发项目需要注意的问题和可能踩到的坑
最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ...