程式設計思想基本概念之回撥(Callback)
在軟體模組呼叫中,主要有三種機制:同步呼叫,非同步呼叫和回撥。
同步呼叫是呼叫方(A)call被呼叫方(B)的介面,並等待B處理完給出一個回執後A才繼續執行,這期間是“阻塞”的。
非同步呼叫是呼叫方(A)call被呼叫方(B)的介面後,不等待B執行完,且B在被呼叫後會直接回執A。
回撥是呼叫方(A)call被呼叫方(B)時,B也回撥(callback)被呼叫方,雙方互調介面,只不過call動作是由A發起的。
同步呼叫是最簡單的,非同步呼叫一般是在回撥的基礎上實現的。所以瞭解“回撥”的機制是至關重要的。各位朋友請看下面的程式碼。
(注:以下示例用Java語言實現,在C,C++或Pascal等語言中也有相應的方式實現。)
package callbackexample;
public interface ICallBack
{
//需要回撥的方法
public void postExec();
}
上面就是一個介面類(抽象類,abstract class),他需要在呼叫方處被實現為一個匿名類。其中的postExec就是回撥方法。
package callbackexample;
package callbackexample;
public class FooBar
{
//組合聚合原則
private ICallBack callBack;
public void setCallBack(ICallBack callBack)
{
this.callBack = callBack;
doSth();
}
public void doSth()
{
callBack.postExec();
}
}
上面是一個被呼叫的類,其中的setCallBack方法是被呼叫的方法。
package callbackexample;
//第二個類在測試類裡面,是一個匿名類:
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物件呼叫");
}
});
}
}
上面的Test就是一個用於測試的呼叫者類,它通過main方法中例項化一個FooBar,並用實現的ICallBack的匿名類作為引數傳遞給FooBar的被呼叫方法setCallBack,而在這個虛擬方法中,FooBar呼叫了匿名類的匿名類的postExec方法的動作,這個動作就是回撥(Callback)。
相關文章
- JS之回撥函式(callback)JS函式
- js 回撥 callbackJS
- 回撥函式(CallBack)函式
- React Render Callback Pattern(渲染回撥模式)React模式
- Java 回撥機制(CallBack) 趣解Java
- 程式設計思想基本概念之函數語言程式設計(Functional Programming)程式設計函數Function
- JavaScript基礎——回撥(callback)是什麼JavaScript
- 函式指標&回撥函式Callback函式指標
- 關於Callback回撥,傳遞引數
- C++回撥函式(callback)的使用C++函式
- JS非同步程式設計之callbackJS非同步程式設計
- 關於 js 中的回撥函式 callbackJS函式
- 初步講解JS中的callback回撥原理JS
- 理解javascript中的回撥函式(callback)【轉】JavaScript函式
- 面試官:你知道Callback Hell(回撥地獄)嗎?面試
- 設計模式:回撥模式設計模式
- nodeJS的回撥程式設計 體驗NodeJS程式設計
- 程式設計思想之冪等性 | 程式設計之道程式設計
- java程式設計思想之註解Java程式設計
- Node.js 非同步程式設計之 Callback介紹Node.js非同步程式設計
- iOS 如何優雅的處理“回撥地獄Callback hell”(一)iOS
- 全網最適合入門的物件導向程式設計教程:47 Python函式方法與介面-回撥函式Callback物件程式設計Python函式
- 程式設計思想 面向切面程式設計程式設計
- java程式設計思想之併發(死鎖)Java程式設計
- Java程式設計思想之靜態技術Java程式設計
- React程式設計思想React程式設計
- 程式設計–基本概念程式設計
- 全新MacBook之設計思想Mac
- 好程式設計師分享迴圈內的回撥函式程式設計師函式
- 併發程式設計 —— 自己寫一個非同步回撥 API程式設計非同步API
- PHP回顧之socket程式設計PHP程式設計
- iOS如何優雅的處理“回撥地獄Callback hell”(二)——使用SwiftiOSSwift
- iOS如何優雅的處理“回撥地獄Callback hell”(一)——使用PromiseKitiOSPromise
- 非同步與回撥的設計哲學非同步
- C++程式設計思想筆記之四 (轉)C++程式設計筆記
- C++程式設計思想筆記之六 (轉)C++程式設計筆記
- 程式設計思想之——"人是活的,程式是死的"程式設計
- 淺談程式設計思想程式設計