1. 什麼是回調函數
回調函數(callback Function),顧名思義,用於回調的函數。 回調函數只是一個功能片斷,由用戶按照回調函數調用約定來實現的一個函數。回調函數是一個工做流的一部分,由工做流來決定函數的調用(回調)時機。回調函數包含下面幾個特性:
一、屬於工做流的一個部分;
二、必須按照工做流指定的調用約定來申明(定義);
三、他的調用時機由工做流決定,回調函數的實現者不能直接調用回調函數來實現工做流的功能;
2. 回調機制
回調機制是一種常見的設計模型,他把工做流內的某個功能,按照約定的接口暴露給外部使用者,爲外部使用者提供數據,或要求外部使用者提供數據。java
=======================================================異步
java回調機制:函數
軟件模塊之間老是存在着必定的接口,從調用方式上,能夠把他們分爲三類:同步調用、回調和異步調用。post
同步調用:一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用;測試
回 調:一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;this
異步調用:一種相似消息或事件的機制,不過它的調用方向恰好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調用客戶方的接口)。spa
回調和異步調用的關係很是緊密:使用回調來實現異步消息的註冊,經過異步調用來實現消息的通知。設計
========================================================code
用Java裏的例子:對象
package callbackexample;
public interface ICallBack {
//須要回調的方法
public void postExec();
}
另外的一個類:
package callbackexample;
public class FooBar {
//組合聚合原則
private ICallBack callBack;
public void setCallBack(ICallBack callBack) {
this.callBack = callBack;
doSth();
}
public void doSth() {
callBack.postExec();
}
}
第二個類在測試類裏面,是一個匿名類:
package callbackexample;
public class Test {
public static void main(String[] args) {
FooBar foo = new FooBar();
foo.setCallBack(new ICallBack() {
public void postExec() {
System.out.println("在Test類中實現但不能被Test的對象引用,而由FooBar對象調用");
}
});
}
}
上訴的代碼:
1.兩個類:匿名類和FooBar
2.匿名類實現接口ICallBack(在test測試的main方法中用匿名類的形式實現)
3.FooBar 擁有一個參數爲ICallBack接口類型的函數setCallBack(ICallBack o)
4.匿名類運行時調用FooBar中setCallBack函數,以自身傳入參數
5.FooBar已取得匿名類,就能夠隨時回調匿名類中所實現的ICallBack接口中的方法
==================================
1。首先回調方法的概念與「構造方法」的概念是不同的,它不是指java中某個具備特殊意義或用途的方法。
2。稱它爲方法的「回調」更恰當一些,它是指方法的一種調用方式。任何一個被「回調」的方法,皆可稱之爲「回調方法」
3。方法的回調一般發生在「java接口」和「抽象類」的使用過程當中。
假設有接口名爲 ICallBack 其中有方法名爲postExec()
有類Myclass 實現了該接口,也就是必定實現了postExec()這個方法。如今有另外一個類FooBar它有個方法 setCallBack(ICallBack callBack) ,而且setCallBack方法調用了callBack的postExec()方法。
若是如今,咱們使用一個Myclass 的實例myClass,將它做爲參數帶入到setCallBack(ICallBack callBack)方法中,咱們就說setCallBack(ICallBack callBack)方法回調了myClass的postExec()方法。
==========================================================