回调方法是什么及其理解

Posted 随花四散

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回调方法是什么及其理解相关的知识,希望对你有一定的参考价值。

  回调方法是类A调用类B的方法,然后B又在某个时候反过来调用类B的方法a,这个a就是回调方法.

  上面这句话读起来绕口且还是对于回调方法还是没有什么实质性的理解,下面举个例子来解释回调方法:

  儿子(Son)要睡午觉了,告诉妈妈(Mother)要一个小时之后叫他醒来,下面是两个类的定义

 1 public class Son {
 2 
 3     public void sleep(Mother m,int time){
 4         System.out.println("son:sleep");
 5         m.call(this,time);//告诉妈妈多久叫醒自己
 6     }
 7     
 8     public void aware(){
 9         System.out.println("son:aware");
10     }
11 }
 1 public class Mother {
 2 
 3     //这里简单起见使用的是用i判断
 4     public void call(Son s,int time){
 5         int i=0;
 6         while(i++==time);
 7         System.out.println("mother:call");
 8         s.aware();//回调
 9     }
10     
11 }

  测试代码

1 public class Test {
2 
3     public static void main(String[] args) {
4         Son s=new Son();
5         Mother m=new Mother();
6         s.sleep(m,100);
7     }
8 }

  在儿子睡觉之前告诉妈妈经过time时间后叫醒自己(this),妈妈在到时间之后,叫醒儿子(s.aware()).这里儿子对应定义中的类A,妈妈对应定义中的类B,aware()方法就是回调方法.a

  以下是个人对回调方法的理解:

  回调使一个功能模块更加灵活,比如上述例子中是儿子让妈妈叫醒他,那么假如又多了一个爸爸也想让妈妈叫醒他呢,这里又需要重载一个call,这里可能会有人说,使用多态实现啊!那假如不是儿子叫妈妈叫醒他自己,而是叫妈妈"叫醒"电视机呢,这里的电视机跟儿子总不会有同一个父类吧.而使用了回调方法,你只需要让被叫醒的对象实现aware()方法即可,使功能模块能够更加灵活.

  在许多框架中都都能看到回调的影子,比如spring在IOC容器初始化时,父容器会调用子容器的方法,子容器也会调用父容器的方法.

以上是关于回调方法是什么及其理解的主要内容,如果未能解决你的问题,请参考以下文章

片段 getActivity() 与接口回调?

如何从活动中传递回调到片段

Facebook状态回调不适用于片段

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

对于回调函数的理解

ios block和delegate的区别