在架构师的进阶道路上,离不开源码的阅读,离不开设计模式的熏陶,更离不开思想的传递,本章带你走进接口回调的设计道路!

1、什么是接口

这里简单复习下接口定义和概念:

  • 接口用interface关键字声明
  • 接口不是类,是一组对类的需求描述,当中定义了很多统一的规范和协议
  • 实现接口的类,必须要按照接口统一制定的标准去编写
  • 更确切来说,接口是建立类的协议

2、接口特性

  • 接口不能够new对象,他本身不是对象类,所谓对象类是不能直接new出的,所以存在多态
  • 接口里面的方法,是没有方法体的{}
  • 接口的实现类必须实现接口里的所有方法
  • 接口的所有修饰字只能为public,接口不能有实例,但是去可以声明接口变量,只不过变量必须指向实现类
  • 接口可以有多个实现类,实现类也可以引用多个接口,但抽象类的子类只能继承一个父类

等等上述的特性

3、接口实现

//接口
public interface Round {public static final double PI=3.1415;int getId();void setId(int id);}
//实现类
public class RoundImpl implements Round {@Overridepublic int getId() {return 0;}@Overridepublic void  setId(int id) {}
}

4、接口回调

  • 接口回调:

通俗说法:有个接口A,还有个A的实现类AImpl,而AImpl中有个方法a()和方法c();

有个B类,B类中有个b()方法;

AImpl通过方法a,调用B类的b方法,然后B类的方法b判断后,是否回调AImpl的c()方法;

  • 同步回调:

方法b中的逻辑执行完再去执行方法c();

  • 异步回调:

b方法和c方法一起再执行

这个描述比较清晰,我们举个例子看下代码

接口A我们定义成CallBack回调接口

public interface CallBack {/*** 收到钱后的思考方法* @param money* @return*/boolean consider(int money);/*** 思考后要不要付钱** @param money*/void payFor(int money);
}

AImpl定义成乘客Passenger

public class PassengerImpl implements CallBack {/*** 司机告诉乘客多少钱* 乘客来考虑是否可以* @param money* @return*/@Overridepublic boolean consider(int money) {boolean result = true;//如果钱大于80块,嫌贵,表示拒绝思考if (money > 80) {result = false;System.out.println(money + "太贵了,你看80可以去吗?");}return result;}/*** 乘客考虑是不是需要给钱给司机这里理解为c方法* @param money*/@Overridepublic void payFor(int money) {System.out.println("ok, 钱给你" + money);}/*** 另起一个方法做为一开始的调用者* 这里就是A类的方法 a()*/public void takeTaxi(Driver driver){System.out.println("师傅,去三亚一天多少钱?");//A类的a方法调用B类的b方法driver.answer(this);}
}

B类定义成司机Driver类

/*** @Author: chenxin* @Date: 2021/2/21 9:06* @Description* 这是司机类,可以作为B类,里面有个B方法*/
public class Driver {/*** 这个作为B类的b方法* @param callBack*/public void answer(CallBack callBack){System.out.println("去那里要100块的!");if(callBack.consider(100)){//回调A类的c方法callBack.payFor(100);}}
}

main测试下

public class Main {public static void main(String[] args) {PassengerImpl passenger = new PassengerImpl();Driver driver = new Driver();passenger.takeTaxi(driver);}
}

我们仔细分析下:

  • 乘客先发起了a方法的请求,实际是takeTaxi方法,为了避免我们在A类中耦合B类对象,所以传入方法参数是Driver对象
  • a方法调用司机的answer方法(b方法),answer方法传入的刚好是实现类本身
  • answer方法作为回答,说要100块,并且调用A的某个函数consider传入司机要求的钱,判断是不是需要回去调用A实现类的c方法(payFor)
  • 司机太贪了所以没能调用payFor
师傅,去三亚一天多少钱?
去那里要100块的!
100太贵了,你看80可以去吗?

那什么是同步回调?

方法b中的逻辑执行完再去执行方法c();也就是等待司机回答answer多少钱,问乘客满不满意consider,再去考虑回调不回调用c方法(payFor)

上述的就是同步执行,总不能钱都没问直接上车吧?

那什么是异步回调?

b方法和c方法一起再执行,c不用等待b结束,就可以直接执行

意思是,payFor付钱这个操作,不需要等待一个司机答复,都去问不同的司机,哪个司机回答可以,哪个司机就去回调c的方法

当然这里代码我就没多写,等第二节我再详细以源码为例子,深入讲解接口回调的操作!!!

本节只是你熟悉下接口回调的思想,下一节走进源码讲解接口回调!!

什么是接口回调(一)相关推荐

  1. Android开发之通过接口回调机制加载数据(源代码分享)

    Android开发之通过接口回调机制加载数据的简单实现,在实际开发中通过callback方法得到网络加载的数据的使用频率远比通过直接开启线程或异步任务加载数据的频率高的多,这篇文章的代码将简单实现该机 ...

  2. Rxjava 实现接口回调的功能

    上一遍文章中写了接口回调的模板,这篇文章用rxjava来实现接口回调的功能 (接口回调:http://blog.csdn.net/michael1112/article/details/5357383 ...

  3. 回调函数、Java接口回调 总结

    回调函数 谈到回调,我们得先从回调函数说起,什么叫回调函数呢? 回调函数是什么? 百度百科的解释:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针 ...

  4. Kotlin中的接口回调

    java的接口回调相信大家都用的相当熟练.不过转战到Kotlin该怎么写接口回调? 本文你会学到单参数回调,多参数回调的写法,直接上代码; /*** 文件:Test* 时间:2018/8/21.* 备 ...

  5. Java接口回调机制

    1.什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类同步调用.异步调用和回调. 同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,使内存中 ...

  6. Android 中的接口回调

    Android 中的接口回调 转载于:https://www.cnblogs.com/zhujiabin/p/5223806.html

  7. 多方法接口回调_啊?Java反射遇到接口

    本文适合有点Java反射基础的同学,在Java反射调用方法时遇到接口参数是一件很蛋疼的事情. 在反射调用方法时需要传参数,像传递基本数据类型进去用就完事,传个对象进去怎么整都没关系,因为你在外部有对象 ...

  8. 回调java 简书_Java接口回调机制详解【转】

    一.回调的含义和用途 1. 什么是回调? 一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类:同步调用.异步调用和回调.同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的 ...

  9. 多方法接口回调_浅析接口定义和接口回调

    目录 一.接口定义 二.接口的特点 三.使用接口的好处 四.接口回调 五.Android中的接口回调机制 一.接口定义 接口通常以interface来修饰. public interface Anim ...

  10. Java 接口做参数,接口回调

    JAVA接口做参数,接口回调 接口做参数:将实现某接口的类的对象的引用用作参数传递给该接口参数.该接口通过回调来实现该接口方法. 接口回调:实现某接口的类的对象的引用,赋值给该接口声明的接口变量. 难 ...

最新文章

  1. angularjs php上传文件,AngularJS 文件上传 的功能你了解的多少?几分钟就让你了解angularjs的文件上传...
  2. VS2008常用快捷键
  3. opencv-contrib-python安装
  4. 展示前一阵子做的小熊!
  5. Android之在ubuntu过滤日志以及ps总结
  6. 需求简报_代码简报:我如何通过做自己喜欢的事情来获得顶级技术实习
  7. 计算机的配置与选购调查报告,目前主流危机计算机的配置及选购的调查报告.doc...
  8. 检查div是否存在jquery [重复]
  9. 计算机网络email服务的配置,计算机网络邮件配置实验报告
  10. DSSM模型的原理简介,预测两个句子的语义相似度
  11. 冲突域和广播域,中继器、集线器、网桥、交换机、路由器和网关
  12. 如何在 macOS 上使用 Verilog 模拟电气模型
  13. PPT课件实现连连看游戏——简单好用
  14. uniapp使用企业微信SDK踩坑指南
  15. 2022年全球市场胸腰椎板系统总体规模、主要生产商、主要地区、产品和应用细分研究报告
  16. JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)
  17. scrollHeight、clientHeight、offsetHeight、 scrollTop
  18. 如何利用Python制作mini翻译器!精通八国语言!
  19. goland创建一个不限长度的字节切片_关于Go切片,看这篇就够了
  20. LTE物理传输资源(1)-帧结构和OFDM符号

热门文章

  1. 使用 uni-app 打包 H5
  2. Echarts社区地址
  3. 软件成本评估时是否在预算阶段也要考虑企业的毛利润?毛利润一般取30%吗?
  4. 【C/C++实战项目】通讯录
  5. 估算题:费米问题的终极破题思路
  6. WC2015 k小割(k短路+暴力+搜索)
  7. 【Springboot-themeleaf】themeleaf片段引入和页面引入
  8. 4EVERLAND 全球大使计划,成为大使获得丰富奖励
  9. 桌面邮件飞机源码——VB.NET网络编程简单实例
  10. Java运行jar包时,指定内存大小