摘自網絡:
回調函數: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,意思就是,喂!該你了!),而作爲我也是要傳遞自己的對象給人家。人家是主角。
----代理與回調的相似:都通過別人來執行自己固有的方法。
代理與回調主要關注的別人怎麼來調你。代理調用自己的方法,方法名跟自己一樣;回調調用自己的方法,方法名沒要求。