什么是回调?
回调是一种双向调用模式,什么意思呢,就是说,被调用方在被调用时也会调用对方,这就叫回调。“If you call me, i will call back”。
维基百科中:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
<!--more-->
说到会调必须要说一说调用方式了 调用方式分为三种
- 同步调用
- 会调
- 异步调用
这三者有什么区别呢? 首先同步调用,同步是一种阻塞式的调用,我们一般写的方法都属于同步调用 比如:A调用B 必须要等待B执行完之后才会继续执行A。
异步调用是一种类似消息或事件的机制,解决了同步阻塞的问题 比如:A调用B后 A继续执行,B也开始执行。
回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口。
为什么使用回调?
A程序员写了一段程序a,其中预留了回调函数接口,并封装好了该程序,程序员B让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法,到这里你可能似懂非懂了,
如果你曾有过Android开发你一定知道给控件设置事件,比如OnClickListener
tvCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//需要执行的操作
}
});
实现OnClickListener接口中的OnClick方法 在OnClick方法执行单机时的操作。 说了这么多大家应该有个初步认识了吧
如果你写方法时,你不知道调用者想干什么,就可以像Android中设置单击事件一样,当初写安卓的时候谁也不知道你单击的时候想做什么,所以就给了一个接口,你去实现这个接口里的某个方法,去完成继续的操作。
千说万说不如代码来的实在,我会根据一个例子向大家介绍如何写回调函数
一个老板去雇一个杀手,去干掉珠宝店的守卫,然后自己去偷东西,如果杀手成功,老板去偷,如果失败老板打算干掉杀手
//杀手类
public class Employee {
//工作
public void Work(DoWork dowork){
if(1+1==2){//如果干掉目标给老板汇报任务完成//3
dowork.MissionComplete();//4
System.out.println("哈哈我成功了");//6
}else{//如果没有干掉目标,给老板汇报任务失败
dowork.MissionFailure()
}
}
}
interface DoWork{
//任务成功
void MissionComplete();
//任务失败
void MissionFailure();
}
public class Boss {
public static void main(String[] args) {
//老板雇一个杀手
Employee employee =new Employee();//1
//杀手去干掉目标
employee.Work(new DoWork() {//2
@Override
public void MissionFailure() {
//5
System.out.println("干得不错,这是你的钱,哈哈我去偷东西了不被发现了");
}
@Override
public void MissionComplete() {
System.out.println("恭喜你已经死了........");
}
});
}
//7
}
可以根据我标注的执行顺序你就可以了解回调机制了 通过这里例子 我相信你已经知道如何去写毁掉了,希望大家生活愉快,BUG越来越少。