最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解Java當(dāng)中的回調(diào)機(jī)制(翻譯)

 更新時(shí)間:2014年10月15日 11:43:01   投稿:mdxy-dxy  
今天我要和大家分享一些東西,舉例來(lái)說(shuō)這個(gè)在JavaScript中用的很多。我要講講回調(diào)(callbacks)。你知道什么時(shí)候用,怎么用這個(gè)嗎?你真的理解了它在java環(huán)境中的用法了嗎?當(dāng)我也問(wèn)我自己這些問(wèn)題,這也是我開(kāi)始研究這些的原因

你好,今天我要和大家分享一些東西,舉例來(lái)說(shuō)這個(gè)在JavaScript中用的很多。我要講講回調(diào)(callbacks)。你知道什么時(shí)候用,怎么用這個(gè)嗎?你真的理解了它在java環(huán)境中的用法了嗎?當(dāng)我也問(wèn)我自己這些問(wèn)題,這也是我開(kāi)始研究這些的原因。這個(gè)背后的思想是控制反轉(zhuǎn)( PS:維基百科的解釋是控制反轉(zhuǎn)(Inversion of Control,縮寫(xiě)為IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來(lái)減低計(jì)算機(jī)代碼之間的耦合度。)這個(gè)范例描述了框架(framework)的工作方式,也以“好萊塢原則:不要打電話給我們,我們會(huì)打給你("Hollywood principle - Don't call me, we will call you)”為人們所熟知。

簡(jiǎn)單的Java里的回調(diào)模式來(lái)理解它,具體的例子在下面:

interface CallBack {
 void methodToCallBack();
}

class CallBackImpl implements CallBack {
 public void methodToCallBack() {
  System.out.println("I've been called back");
 }
}

class Caller {

 public void register(CallBack callback) {
  callback.methodToCallBack();
 }

 public static void main(String[] args) {
  Caller caller = new Caller();
  CallBack callBack = new CallBackImpl();
  caller.register(callBack);
 }
}

你可能要問(wèn)我,什么時(shí)候用這個(gè)或者會(huì)問(wèn)直接調(diào)用和回調(diào)機(jī)制有什么不同呢?

答案是:好吧,這個(gè)例子僅僅向你展示了怎樣在java環(huán)境中構(gòu)造這樣的回調(diào)函數(shù)。當(dāng)然用那種方式使用它毫無(wú)意義。讓我們現(xiàn)在更加深入具體地研究它。

在它之中的思想是控制反轉(zhuǎn)。讓我們用定時(shí)器作為現(xiàn)實(shí)中的例子。假設(shè)你知道,有一個(gè)特別的定時(shí)器支持每小時(shí)回調(diào)的功能。準(zhǔn)確地說(shuō)意思是,每小時(shí),定時(shí)器會(huì)調(diào)用你注冊(cè)的調(diào)用方法。

具體的例子:

我們想要每小時(shí)更新一次網(wǎng)站的時(shí)間,下面是例子的UML模型:

回調(diào)接口:

讓我們首先定義回調(diào)接口:

import java.util.ArrayList;
import java.util.List;

// For example: Let's assume that this interface is offered from your OS to be implemented
interface TimeUpdaterCallBack {
 void updateTime(long time);
}

// this is your implementation.
// for example: You want to update your website time every hour
class WebSiteTimeUpdaterCallBack implements TimeUpdaterCallBack {

 @Override
 public void updateTime(long time) {
  // print the updated time anywhere in your website's example
  System.out.println(time);
 }
}

在我們的例子中系統(tǒng)定時(shí)器支持回調(diào)方法:

// This is the SystemTimer implemented by your Operating System (OS)
// You don't know how this timer was implemented. This example just
// show to you how it could looks like. How you could implement a
// callback by yourself if you want to.
class SystemTimer {

 List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>();

 public void registerCallBackForUpdatesEveryHour(TimeUpdaterCallBack timerCallBack) {
  callbacks.add(timerCallBack);
 }

 // ... This SystemTimer may have more logic here we don't know ...

 // At some point of the implementaion of this SystemTimer (you don't know)
 // this method will be called and every registered timerCallBack
 // will be called. Every registered timerCallBack may have a totally
 // different implementation of the method updateTime() and my be
 // used in different ways by different clients.
 public void oneHourHasBeenExprired() {

  for (TimeUpdaterCallBack timerCallBack : callbacks) {
   timerCallBack.updateTime(System.currentTimeMillis());
  }
 }
}

最后是我們虛擬簡(jiǎn)單的例子中的網(wǎng)站時(shí)間更新器:

// This is our client. It will be used in our WebSite example. It shall update
// the website's time every hour.
class WebSiteTimeUpdater {

 public static void main(String[] args) {
  SystemTimer SystemTimer = new SystemTimer();
  TimeUpdaterCallBack webSiteCallBackUpdater = new WebSiteTimeUpdaterCallBack();
  SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater);
 }
}

原文:http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html

相關(guān)文章

  • Java 中通過(guò) key 獲取鎖的方法

    Java 中通過(guò) key 獲取鎖的方法

    這篇文章主要介紹了Java 中通過(guò) key 獲取鎖,本文演示如何對(duì)某個(gè) key 加鎖,以保證對(duì)該 key 的并發(fā)操作限制,可以實(shí)現(xiàn)同一個(gè) key 一個(gè)或者多個(gè)線程同時(shí)執(zhí)行,需要的朋友可以參考下
    2022-11-11
  • 簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法

    簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法

    這篇文章主要介紹了簡(jiǎn)單了解Java的默認(rèn)和靜態(tài)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • java鎖synchronized面試常問(wèn)總結(jié)

    java鎖synchronized面試常問(wèn)總結(jié)

    這篇文章主要介紹了java鎖synchronized面試常問(wèn)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單,雙向鏈表

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單,雙向鏈表

    這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛(ài)好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-07-07
  • Javafx實(shí)現(xiàn)國(guó)際象棋游戲

    Javafx實(shí)現(xiàn)國(guó)際象棋游戲

    這篇文章主要為大家詳細(xì)介紹了Javafx實(shí)現(xiàn)國(guó)際象棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Springboot2.3.x整合Canal的示例代碼

    Springboot2.3.x整合Canal的示例代碼

    canal是阿里開(kāi)源mysql?binlog?數(shù)據(jù)組件,canal-server?才是canal的核心我們前邊所講的canal的功能,實(shí)際上講述的就是canal-server的功能,本文給大家介紹Springboot2.3.x整合Canal的示例代碼,需要的朋友可以參考下
    2022-02-02
  • 使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)映射的方式

    使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)映射的方式

    這篇文章主要介紹了使用MyBatis進(jìn)行數(shù)據(jù)庫(kù)映射的方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Java基于rest assured實(shí)現(xiàn)接口測(cè)試過(guò)程解析

    Java基于rest assured實(shí)現(xiàn)接口測(cè)試過(guò)程解析

    這篇文章主要介紹了Java基于rest assured實(shí)現(xiàn)接口測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • springboot實(shí)現(xiàn)配置兩個(gè)parent的方法

    springboot實(shí)現(xiàn)配置兩個(gè)parent的方法

    這篇文章主要介紹了springboot實(shí)現(xiàn)配置兩個(gè)parent的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java魔法值處理的四種方式

    Java魔法值處理的四種方式

    這篇文章主要介紹了Java魔法值處理的四種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

南阳市| 张家界市| 南溪县| 和田县| 贡山| 油尖旺区| 余江县| 鄄城县| 汤原县| 健康| 扶风县| 合江县| 肥城市| 抚顺县| 尼勒克县| 皮山县| 英山县| 曲周县| 措勤县| 遂川县| 乌海市| 嵩明县| 嘉荫县| 彝良县| 龙口市| 白山市| 赤水市| 通山县| 昭苏县| 登封市| 昆明市| 交口县| 通许县| 旬阳县| 长沙县| 探索| 潜山县| 昌宁县| 涿州市| 建瓯市| 临沧市|