• 什么是回调

回调其实是一种双向调用模式,也就是调用方在接口被调用时也会调用对方的接口。通俗的解释为:类A调用了类B中的方法1,然后类B最后又反过来调用类A中的方法2,即把结果返回给类A。

  • 回调的具体实现(通过接口)

   1、Class A实现接口CallBack callback——背景1

   2、class A中包含一个class B的引用b ——背景2

   3、class B有一个参数为callback的方法f(CallBack callback) ——背景3

   4、A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C

   5、然后B就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D

  这里通过一个经典的例子来说明回调的具体实现机制,在这个机制里,包含两个类和一个接口,接口的定义如下:

//相当于接口InA
public interface BoomWTC{
  //获得拉登的决定
  public benLaDengDecide();

  // 执行轰炸世贸
  public void boom();
}

  类A的定义如下,它作为一个主类,实现了接口

//相当于class A
public class At$911 implements BoomWTC{   
  private boolean decide;
  private TerroristAttack ta;      //类B

  public At$911(){      //构造函数
    Date now=new Date();
    SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
    this.dicede= myFmt.format(dt).equals("01/09/11 09:44");
    this.ta=new TerroristAttack();
  }

  //获得拉登的决定
  public boolean benLaDengDecide(){
    return decide;
  }

  // 执行轰炸世贸
  public void boom(){
    ta.attack(new At$911);//class A调用class B的方法传入自己的对象,相当于【you call me】
  }
}

  类B的定义如下:

public class TerroristAttack{
  public TerroristAttack(){
  }

  public attack(BoomWTC bmw){   //调用类A中的方法
    if(bmw.benLaDengDecide()){    /*class B在方法中回调class A的方法,相当于【i call you back】*/
       
    }
  }
}

   从例子可以看出,类B是通过接口回调了类A的方法

 程序猿必读

posted on 2016-11-28 23:02  龙种人  阅读(781)  评论(0编辑  收藏  举报