回调在现实生活中最简单的例子就是:假设你公司的总经理出差前需要你帮他办一件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差把,于是就告诉你他的手机号码叫你但如果事情办完了,你就打电话告诉他一声。这是一个现实生活中的例子。在Android程序和Java程序中也会经常使用到这种回调机制,下边给大家说一下详细的代码:
//Manager 经理类
public class Manager{
public Manager(Personal personal){
personal.doSomething(this,"整理文件");
}
//当员工做完总经理让他做的事后,就通过该方法通知总经理
public void phoneCall(String result){
System.out.println("事情:"+result);
}
}
Manager类是哥模拟总经理的类,当该类的对象被造出来后就会通过Personel对象去执行Personnel中的doSomething方法告诉员工做些什么Personal的代码如下:
//personal的代码如下:
public class Personal{
public void doSomething(Manager manager, String task){
System.out.println("总经理吩咐的任务:"+task);
String result="做完了";
//做完之后我们需要通过总经理公布的poneCall方法通知总计里结果。
manager.phoneCall(result);
}
}
//总经理通过调用Personal中的doSomething方法告诉员工该做些什么,当员工做完后就通过Manager中的phoneCall方法通知总经理结果。
//Main方法的代码如下
public class Main{
//首先我们需要一个员工
Personal personal=new Personal();
//其次我们把这个员工指派给总经理
new Manager(personal);
}
满足回调的两个基本的条件:
1. Class A 调用Class B的X 方法
2. Class B中X方法执行的过程中调用Class A中的Y方法完成回调。
上边的这个例子非常的好理解,但是问题来了,如果总经理出差前交代了事情给我去搬,不巧,副总经理也要给我件事情去办,更无耻的是.....主管也发任务过来了,都要求说做完就打电话通知他们, 这是我们就要定义更多的类,什么总经理类,经理类,主管类,等非常多的类,但是这些类都要求做完事情就电话通知他们,每一个类都会有一个类似poneCall的方法作为回调方法,这时,我们利用面向对象的思想来看,是不是可以把这个回调方法抽象出来作为i一个独立的抽象类或接口呢。这也就是多态的思想,我们定义一个名为CallBack的接口作为回调接口,在该接口下定义一个名为backResult抽象方法作物回调方法。让总经理和经理都去实现这个接口。这样才能真正的体现回调,多态,接口的定义。
下面来改正一下代码:
//回调接口
public interface CallBack{
//回调方法
public void backResult(String result)
}
Manager类的改造方法如下:
//Manager类,用来模拟总经理
public class Manager implements CallBack{
public Manager(Personal personal){
//想让员工做什么
personnel.doSomething(this, "整理公司文件");
}
//当员工做完总经理让他做的事后就通过该方法通知总经理
public void backResult(String result){
System.out.println("事情:"+reslut);
}
}
Personal 代码改造以后如下:
doSomething方法不再传入一个Manager对象而是一个CallBack接口:
//该类用来模拟员工
public class Personal{
public void doSomething(Callback callBack, String task){
//总经理通过doSomething方法告诉员工要做什么
System.out.println("总经理要你做"+task);
String result="做完了";
//当事情做完了我么就通过总经理公布的phoneCall方法通知总经理结果
callBack.backResult(result);
}
}
这就是所谓的回调的神秘算法之处。我是完全明白了。