回调机制
首先,我们给出一个粗略的定义:在A类中调用了B类的一个方法C,而方法C又调用了A类中的D方法。那么这个D方法就称作为回调函数。
关于这个粗略的定义,我们给出一个例子:
public class WifiBehavior {
public void isConnect(String string) {
if(string.equals("success")) {
System.out.println(string);
}
}
public void onConncet(int time) {
WifiConnect wifiConnect = new WifiConnect();
wifiConnect.connect(time);
}
}
public class WifiConnect {
public void connect(int id) {
try {
Thread.sleep(4000);
WifiBehavior wifiBehavior = new WifiBehavior();
wifiBehavior.isConnect("success");
}catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
public class Test {
public static void main(String []args) {
WifiBehavior wifiBehavior = new WifiBehavior();
wifiBehavior.onConncet(3000);
}
}
第一个类调用第二个类中的connect方法,而第二个类的connect方法中又调用了第一个类中的isConnect方法, isConnect方法就是回调函数。
也可以利用接口和抽象类:
import huidiao2.WifiConnect.WifiConnectListener;
public class WifiBehavior {
public void onConnect(int time) {
WifiConnect wifiConnect = new WifiConnect();
wifiConnect.connect(time,new WifiConnectListener() {
@Override
public void isConnceted(String string) {
// TODO Auto-generated method stub
System.out.println(string);
//连接成功之后在这里进行操作
}
});
}
}
public class WifiConnect {
public void connect(int time,WifiConnectListener wifiConnectListener) {
try {
Thread.sleep(time);
wifiConnectListener.isConnceted("successful");
}catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
public interface WifiConnectListener{
void isConnceted(String string);
}
}
public class Test {
public static void main(String[]args) {
WifiBehavior wifiBehavior = new WifiBehavior();
wifiBehavior.onConnect(3000);
}
}
那关于回调的理解:个人观点是,组件A在调用组件B方法时候想要获得组件B方法的进度,或者是在组件B方法过程中发生的变化,是观察者模式的一种实现。如何实现回调呢?如果套用上面叫粗略的定义,我们需要在类B中的C方法中new一个A对象,调用A中的D方法。

浙公网安备 33010602011771号