欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java回調函數原理實例與代理模式的區(qū)別講解

 更新時間:2019年02月01日 14:55:54   作者:plumblum  
今天小編就為大家分享一篇關于Java回調函數原理實例與代理模式的區(qū)別講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

java 回調函數例子,及其原理,與代理模式的區(qū)別

回調函數

應用程序(application program)會時常通過API調用庫里所預先備好的函數。但是有些庫函數(library function)卻要求應用先傳給它一個函數,好在合適的時候調用,以完成目標任務。這個被傳入的、后又被調用的函數就稱為回調函數(callback function)。

作用: 可以把調用者與被調用者分開。調用者不關心誰是被調用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調用函數。

例子

一個計算函數運行時間的工具類,正常方法

/**
 * @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(); //測試結束時間
    System.out.println("[use time]:" + (end - begin)); //打印使用時間
  }
  public static void main(String[] args) {
    RunningTime test=new RunningTime();
    test.testTime();
  }
}

創(chuàng)建回調函數接口

public interface CallBack {
  //執(zhí)行回調操作的方法
  void execute();
}

回調函數

/**
 * @Auther: cpb
 * @Date: 2019/1/17 16:35
 * @Description:
 */
public class Tools {
  /**
   * 測試函數使用時間,通過定義CallBack接口的execute方法
   * @param callBack
   */
  public  void testTime(CallBack callBack) {
    long begin = System.currentTimeMillis(); //測試起始時間
    callBack.execute(); ///進行回調操作
    long end = System.currentTimeMillis(); //測試結束時間
    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();
      }
    });
  }
}

為什么叫回調函數

我們觀看一下程序運行的流程,tools->CallBacks->tools,顧為回調函數。

代理模式

//接口
public interface CallBack {
  //執(zhí)行回調操作的方法
  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();
  }
}
//調用方法類
public class Tools {
  /**
   * 測試函數使用時間,通過定義CallBack接口的execute方法
   * @param callBack
   */
  public  void testTime(CallBack callBack) {
    long begin = System.currentTimeMillis(); //測試起始時間
    callBack.execute(); ///進行回調操作
    long end = System.currentTimeMillis(); //測試結束時間
    System.out.println("[use time]:" + (end - begin)); //打印使用時間
  }
  public  static  void main(String[] args) {
    Tools tool = new Tools();
    //讓代理去實現(xiàn)方法去調用方法
    Proxy proxy = new Proxy(new MyCallBack());
    tool.testTime(proxy);
  }
}

代理模式和回調函數的區(qū)別

  1. 代理模式需要創(chuàng)建接口實現(xiàn)類,并放入代理類中,隔離性更好,擴展性好
  2. 回調函數不需要創(chuàng)建接口實現(xiàn)類,編寫方便。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • 如何使用lamda表達式對list進行求和

    如何使用lamda表達式對list進行求和

    這篇文章主要介紹了如何使用lamda表達式對list進行求和問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 解決springcloud中Feign導入依賴為unknow的情況

    解決springcloud中Feign導入依賴為unknow的情況

    這篇文章主要介紹了解決springcloud中Feign導入依賴為unknow的情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 數據結構算法Collection接口迭代器示例詳解

    Java 數據結構算法Collection接口迭代器示例詳解

    這篇文章主要為大家介紹了Java 數據結構算法Collection接口迭代器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • JDK集合源碼之解析TreeMap(二)

    JDK集合源碼之解析TreeMap(二)

    下面小編就為大家?guī)硪黄獪\談java中的TreeMap 排序與TreeSet 排序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • java calendar 日期實現(xiàn)不斷加一天的代碼

    java calendar 日期實現(xiàn)不斷加一天的代碼

    這篇文章主要介紹了java calendar 日期實現(xiàn)不斷加一天的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 解決Spring配置文件中bean的property屬性中的name出錯問題

    解決Spring配置文件中bean的property屬性中的name出錯問題

    這篇文章主要介紹了解決Spring配置文件中bean的property屬性中的name出錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實現(xiàn)去重的方法詳解

    Java實現(xiàn)去重的方法詳解

    austin支持兩種去重的類型:N分鐘相同內容達到N次去重和一天內N次相同渠道頻次去重,這篇文章就來和大家講講這兩種去重的具體實現(xiàn),需要的可以參考一下
    2023-06-06
  • java單機接口限流處理方案詳解

    java單機接口限流處理方案詳解

    這篇文章主要為大家詳細介紹了java單機接口限流處理方案,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • maven 配置多個倉庫的方法

    maven 配置多個倉庫的方法

    這篇文章主要介紹了maven 配置多個倉庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Hutool?Java工具類庫_ExcelUtil的使用

    Hutool?Java工具類庫_ExcelUtil的使用

    這篇文章主要介紹了Hutool?Java工具類庫_ExcelUtil的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論