再看Java回調

前言

原來在瞭解回調的時候,就只是瞭解了它的基本的概念,比較淺層的知識,今天我們就從原理和本質的角度來了解一下到底什麼是回調。


敘述

什麼是回調

回調,回調。要先有調用,纔有調用者和被調用者之間的回調。所以在百度百科中是這樣的:

軟件模塊之間總是存在着一定的接口,從調用方式上,可以把他們分爲三類:同步調用、回調和異步調用。

回調是一種特殊的調用,至於三種方式也有點不同。

1、同步回調,即阻塞,單向
在這裏插入圖片描述
  同步調用是最基本並且最簡單的一種調用方式,類A的方法a()調用類B的方法b(),一直等待b()方法執行完畢,a()方法繼續往下走。這種調用方式適用於方法b()執行時間不長的情況,因爲b()方法執行時間一長或者直接阻塞的話,a()方法的餘下代碼是無法執行下去的,這樣會造成整個流程的阻塞。
2、異步調用,即通過異步消息進行通知
  異步調用是爲了解決同步調用可能出現阻塞,導致整個流程卡住而產生的一種調用方式。類A的方法方法a()通過新起線程的方式調用類B的方法b(),代碼接着直接往下執行,這樣無論方法b()執行時間多久,都不會阻塞住方法a()的執行。但是這種方式,由於方法a()不等待方法b()的執行完成,在方法a()需要方法b()執行結果的情況下(視具體業務而定,有些業務比如啓異步線程發個微信通知、刷新一個緩存這種就沒必要),必須通過一定的方式對方法b()的執行結果進行監聽
3、回調,即雙向(類似自行車的兩個齒輪)
在這裏插入圖片描述
回調的思想是:
  類A的a()方法調用類B的b()方法
  類B的b()方法執行完畢主動調用類A的callback()方法


實現回調的方式

接下來我們通過一個例子來看一下回調函數的具體實現。

所謂的回調,就是程序員A寫了一段程序(程序a),其中預留有回調函數接口,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的接口回調自己b中的方法

1.首先定義一個類Caller,按照上面的定義就是程序員A寫的程序a,這個類裏面保存一個接口引用

public class Caller {
	private MyCallInterface callInterface;
	
	public Caller() {
	}
	
	public void setCallFunc(MyCallInterface callInterface) {
		this.callInterface = callInterface;
	}
	
	public void call() {
		callInterface.printName();
	}
}

  1. 當然需要接口的定義,爲了方便程序員B根據我的定義編寫程序實現接口。
public interface MyCallInterface {
	public void  printName();
}
  1. 第三是定義程序員B寫的程序b
public class Client implements MyCallInterface {
 
	@Override
	public void printName() {
		System.out.println("This is the client printName method");
	}
}

4.我們來看一下客戶端代碼

public class Test {
	public static void main(String[] args) {
		Caller caller = new Caller();
		caller.setCallFunc(new Client());
		caller.call();
	}
}

通過上述的代碼我們可以瞭解到客戶端(Test)---->調用Caller類的setCallFunc的方法---->調用MyCallInterface(接口)中的printName方法---->調用Client(MyCallInterface接口的實現類)的printName方法---->客戶端

代碼從客戶端開始調用又回到了客戶端,通過回調的概念我們可以知道,底層代碼調用高層定義的子程序,增強程序靈活性,和反射有着異曲同工之妙,我覺得這纔是回調的真正原因。

我們知道父類,接口通常被我們稱爲基(低)層,在上面這個例子中我們稱MyCallInterface接口爲底層代碼,接口的實現類Client爲高層定義的子程序


小結

回調的概念解釋了回調的一切內容,底層代碼調用高層定義的子程序,所以理解回調,我們就要理解什麼是底層代碼,什麼是高層定義的子程序,明白了這兩者內容,我們就可以徹底的明白回調的意義了。

感謝您的閱讀~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章