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

Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

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

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

回調(diào)函數(shù)

應(yīng)用程序(application program)會(huì)時(shí)常通過API調(diào)用庫里所預(yù)先備好的函數(shù)。但是有些庫函數(shù)(library function)卻要求應(yīng)用先傳給它一個(gè)函數(shù),好在合適的時(shí)候調(diào)用,以完成目標(biāo)任務(wù)。這個(gè)被傳入的、后又被調(diào)用的函數(shù)就稱為回調(diào)函數(shù)(callback function)。

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

例子

一個(gè)計(jì)算函數(shù)運(yùn)行時(shí)間的工具類,正常方法

/**
 * @Auther: cpb
 * @Date: 2019/1/17 16:32
 * @Description:
 */
public class RunningTime {
  /**
   * 一個(gè)用來被測(cè)試的方法,進(jìn)行了一個(gè)比較耗時(shí)的循環(huán)
   */
  public  static  void testMethod(){
    for ( int i= 0 ; i< 100000000 ; i++){
    }
  }
  /**
   * 一個(gè)簡(jiǎn)單的測(cè)試方法執(zhí)行時(shí)間的方法
   */
  public void testTime(){
    long begin = System.currentTimeMillis(); //測(cè)試起始時(shí)間
    testMethod(); //測(cè)試方法
    long end = System.currentTimeMillis(); //測(cè)試結(jié)束時(shí)間
    System.out.println("[use time]:" + (end - begin)); //打印使用時(shí)間
  }
  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 {
  /**
   * 測(cè)試函數(shù)使用時(shí)間,通過定義CallBack接口的execute方法
   * @param callBack
   */
  public  void testTime(CallBack callBack) {
    long begin = System.currentTimeMillis(); //測(cè)試起始時(shí)間
    callBack.execute(); ///進(jìn)行回調(diào)操作
    long end = System.currentTimeMillis(); //測(cè)試結(jié)束時(shí)間
    System.out.println("[use time]:" + (end - begin)); //打印使用時(shí)間
  }
  public  static  void main(String[] args) {
    Tools tool = new Tools();
    tool.testTime(new CallBack(){
      //定義execute方法
      public  void execute(){
        //這里可以加放一個(gè)或多個(gè)要測(cè)試運(yùn)行時(shí)間的方法
        RunningTime.testMethod();
      }
    });
  }
}

為什么叫回調(diào)函數(shù)

我們觀看一下程序運(yùn)行的流程,tools->CallBacks->tools,顧為回調(diào)函數(shù)。

代理模式

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

代理模式和回調(diào)函數(shù)的區(qū)別

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 如何使用lamda表達(dá)式對(duì)list進(jìn)行求和

    如何使用lamda表達(dá)式對(duì)list進(jìn)行求和

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

    解決springcloud中Feign導(dǎo)入依賴為unknow的情況

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

    Java 數(shù)據(jù)結(jié)構(gòu)算法Collection接口迭代器示例詳解

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

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

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

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

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

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

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

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

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

    java單機(jī)接口限流處理方案詳解

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

    maven 配置多個(gè)倉庫的方法

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

    Hutool?Java工具類庫_ExcelUtil的使用

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

最新評(píng)論