回调机制

首先,我们给出一个粗略的定义:在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方法。

posted @ 2018-12-14 15:58  The_After  阅读(208)  评论(0)    收藏  举报