摘自网络:

   回调函数:A调用B,同时传A给B。B执行完会调用A的方法(回调)
   目的就是:A发起调用B,B处理完一些事情,再回调执行A的一些操作。
   两者关系:A和B是关联关系。

=============================== 

 这个类相当于B(B执行完会调用A的方法)。

public class Caller {  

       private MyCallInterface callInterface;  //接收实现接口的对象

       public void setCallFunc(MyCallInterface callInterface) {  

         this.callInterface = callInterface;  

      }      

      public void call() {  //回调函数

       callInterface.printName();  

    }  

  }


----接口

public interface MyCallInterface {  

    public void  printName();  

}  

  

---相当于A类,被B类回调。

public class Client implements MyCallInterface {    

public void printName() {  

   System.out.println("This is the client printName method");  

   }  

-----回调开始  重要

public class Test {  

    public static void main(String[] args) {  

        Caller caller = new Caller();  

        caller.setCallFunc(new Client());  //实现接口的具体对象作为参数

        caller.call();  //调用参数中的具体方法

    }  

}  

=================补充:JAVA代理模式

首先说明下代理模式的需求:一组类都实现同一个接口,但是其中一些还需要自己的方法,为了取代手动给他们单独添加方法的做法,就有了代理;原理就是:把需要添加的方法的类,交给一个新的类,这个类不改变原有的类基础上,做到添加特有的方法。AOP就是这个原理。代理类其实就是对原有类封装后再升级。

具体查看:http://www.cnblogs.com/tiantianbyconan/archive/2012/11/20/2779095.html

静态代理:被代理的类可以直接并且很明确地将告诉(传递)代理类自己的具体对象。

动态代理:被代理类不能直接告诉代理类有关自己对象的信息,智能提供部分信息,剩余的部分需要代理类根据已有信息动态生成被代理类。

-----代理与回调的区别:

 代理,代理类能够代表被代理的前提下(代理类要实现被代理的接口,作为我的代理人,起码得跟我某些重要方面是一个立场吧!)。最终执行我固有方法的类,外貌跟我相似。我是主角。

回调,最终执行我固有方法的类,外貌不强调(你可以不实现我实现的接口)。强调的是,你执行的时候一定要叫上我(一般的回调函数,就做callback,意思就是,喂!该你了!),而作为我也是要传递自己的对象给人家。人家是主角。


----代理与回调的相似:都通过别人来执行自己固有的方法。


代理与回调主要关注的别人怎么来调你。代理调用自己的方法,方法名跟自己一样;回调调用自己的方法,方法名没要求。