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

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

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

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

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

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);
 }
}

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

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

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

具體的例子:

我們想要每小時更新一次網(wǎng)站的時間,下面是例子的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)定時器支持回調(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());
  }
 }
}

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

// 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)文章

  • Jenkins的安裝配置詳解

    Jenkins的安裝配置詳解

    這篇文章主要介紹了Jenkins的安裝配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Spring零基礎(chǔ)入門IOC

    Spring零基礎(chǔ)入門IOC

    IoC就是比方說有一個類,我們想要調(diào)用類里面的方法(不是靜態(tài)方法),就要創(chuàng)建該類的對象,使用對象調(diào)用方法來實(shí)現(xiàn)。但對于Spring來說,Spring創(chuàng)建對象的過程,不是在代碼里面實(shí)現(xiàn)的,而是交給Spring來進(jìn)行配置實(shí)現(xiàn)的
    2022-08-08
  • Java 面試題和答案 -(上)

    Java 面試題和答案 -(上)

    本文主要介紹Java 面試題和答案,這里整理了Java面試中出現(xiàn)的各種題型,和相應(yīng)知識點(diǎn),有需要的小伙伴可以好好參考下,幫助大家面試成功
    2016-09-09
  • Spring集成Quartz的簡單配置的方法

    Spring集成Quartz的簡單配置的方法

    本篇文章主要介紹了Spring集成Quartz的簡單配置的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Mybatis逆向工程運(yùn)行代碼實(shí)例

    Mybatis逆向工程運(yùn)行代碼實(shí)例

    這篇文章主要介紹了Mybatis逆向工程運(yùn)行代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java中實(shí)現(xiàn)可拖放圖片剪裁入門教程

    Java中實(shí)現(xiàn)可拖放圖片剪裁入門教程

    這篇文章主要介紹了Java中實(shí)現(xiàn)可拖放圖片剪裁入門教程,本文寫給新手,分步驟講解如何實(shí)現(xiàn)圖片裁剪,并對每步的代碼作注釋,需要的朋友可以參考下
    2015-01-01
  • Java實(shí)現(xiàn)的zip工具類完整實(shí)例

    Java實(shí)現(xiàn)的zip工具類完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的zip工具類,結(jié)合完整實(shí)例形式分析了Java針對zip文件指定路徑壓縮、遞歸壓縮等相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • Dubbo?LoadBalance基于權(quán)重的隨機(jī)負(fù)載均衡算法提高服務(wù)性能

    Dubbo?LoadBalance基于權(quán)重的隨機(jī)負(fù)載均衡算法提高服務(wù)性能

    這篇文章主要為大家介紹了Dubbo?LoadBalance基于權(quán)重的隨機(jī)負(fù)載均衡算法提高服務(wù)性能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-10-10
  • Java中Hashtable類與HashMap類的區(qū)別詳解

    Java中Hashtable類與HashMap類的區(qū)別詳解

    Hashtable的應(yīng)用非常廣泛,HashMap是新框架中用來代替Hashtable的類,也就是說建議使用HashMap,不要使用Hashtable??赡苣阌X得Hashtable很好用,為什么不用呢?這里簡單分析他們的區(qū)別。
    2016-01-01
  • Java多線程學(xué)習(xí)筆記

    Java多線程學(xué)習(xí)筆記

    常用的實(shí)現(xiàn)多線程的兩種方式:Thread和Runnable。之所以說是“常用”,是因?yàn)樵贘ava 5后可以通過java.util.concurrent包中的線程池來實(shí)現(xiàn)多線程
    2021-09-09

最新評論