Java回調(diào)函數(shù)原理實例與代理模式的區(qū)別講解
java 回調(diào)函數(shù)例子,及其原理,與代理模式的區(qū)別
回調(diào)函數(shù)
應用程序(application program)會時常通過API調(diào)用庫里所預先備好的函數(shù)。但是有些庫函數(shù)(library function)卻要求應用先傳給它一個函數(shù),好在合適的時候調(diào)用,以完成目標任務。這個被傳入的、后又被調(diào)用的函數(shù)就稱為回調(diào)函數(shù)(callback function)。
作用: 可以把調(diào)用者與被調(diào)用者分開。調(diào)用者不關心誰是被調(diào)用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調(diào)用函數(shù)。
例子
一個計算函數(shù)運行時間的工具類,正常方法
/**
* @Auther: cpb
* @Date: 2019/1/17 16:32
* @Description:
*/
public class RunningTime {
/**
* 一個用來被測試的方法,進行了一個比較耗時的循環(huán)
*/
public static void testMethod(){
for ( int i= 0 ; i< 100000000 ; i++){
}
}
/**
* 一個簡單的測試方法執(zhí)行時間的方法
*/
public void testTime(){
long begin = System.currentTimeMillis(); //測試起始時間
testMethod(); //測試方法
long end = System.currentTimeMillis(); //測試結(jié)束時間
System.out.println("[use time]:" + (end - begin)); //打印使用時間
}
public static void main(String[] args) {
RunningTime test=new RunningTime();
test.testTime();
}
}
創(chuàng)建回調(diào)函數(shù)接口
public interface CallBack {
//執(zhí)行回調(diào)操作的方法
void execute();
}
回調(diào)函數(shù)
/**
* @Auther: cpb
* @Date: 2019/1/17 16:35
* @Description:
*/
public class Tools {
/**
* 測試函數(shù)使用時間,通過定義CallBack接口的execute方法
* @param callBack
*/
public void testTime(CallBack callBack) {
long begin = System.currentTimeMillis(); //測試起始時間
callBack.execute(); ///進行回調(diào)操作
long end = System.currentTimeMillis(); //測試結(jié)束時間
System.out.println("[use time]:" + (end - begin)); //打印使用時間
}
public static void main(String[] args) {
Tools tool = new Tools();
tool.testTime(new CallBack(){
//定義execute方法
public void execute(){
//這里可以加放一個或多個要測試運行時間的方法
RunningTime.testMethod();
}
});
}
}
為什么叫回調(diào)函數(shù)
我們觀看一下程序運行的流程,tools->CallBacks->tools,顧為回調(diào)函數(shù)。
代理模式
//接口
public interface CallBack {
//執(zhí)行回調(diào)操作的方法
void execute();
}
//實現(xiàn)類
public class MyCallBack implements CallBack{
@Override
public void execute() {
MyCallBack.testMethod();
}
public static void testMethod(){
for ( int i= 0 ; i< 100000000 ; i++){
}
}
}
//代理類
public class Proxy implements CallBack {
private CallBack callBack;
public Proxy(CallBack callBack){
this.callBack = callBack;
}
@Override
public void execute() {
callBack.execute();
}
}
//調(diào)用方法類
public class Tools {
/**
* 測試函數(shù)使用時間,通過定義CallBack接口的execute方法
* @param callBack
*/
public void testTime(CallBack callBack) {
long begin = System.currentTimeMillis(); //測試起始時間
callBack.execute(); ///進行回調(diào)操作
long end = System.currentTimeMillis(); //測試結(jié)束時間
System.out.println("[use time]:" + (end - begin)); //打印使用時間
}
public static void main(String[] args) {
Tools tool = new Tools();
//讓代理去實現(xiàn)方法去調(diào)用方法
Proxy proxy = new Proxy(new MyCallBack());
tool.testTime(proxy);
}
}
代理模式和回調(diào)函數(shù)的區(qū)別
- 代理模式需要創(chuàng)建接口實現(xiàn)類,并放入代理類中,隔離性更好,擴展性好
- 回調(diào)函數(shù)不需要創(chuàng)建接口實現(xiàn)類,編寫方便。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
解決springcloud中Feign導入依賴為unknow的情況
這篇文章主要介紹了解決springcloud中Feign導入依賴為unknow的情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java 數(shù)據(jù)結(jié)構算法Collection接口迭代器示例詳解
這篇文章主要為大家介紹了Java 數(shù)據(jù)結(jié)構算法Collection接口迭代器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
java calendar 日期實現(xiàn)不斷加一天的代碼
這篇文章主要介紹了java calendar 日期實現(xiàn)不斷加一天的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
解決Spring配置文件中bean的property屬性中的name出錯問題
這篇文章主要介紹了解決Spring配置文件中bean的property屬性中的name出錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

