一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 理解Java當(dāng)中的回調(diào)機(jī)制(翻譯)

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

2019-12-02 14:21mdxy-dxy JAVA教程

今天我要和大家分享一些東西,舉例來(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,縮寫為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)理解它,具體的例子在下面:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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模型:

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

回調(diào)接口:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)方法:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 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í)間更新器:

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

?
1
2
3
4
5
6
7
8
9
10
// 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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美三级免费观看 | 日韩亚洲一区中文字幕在线 | 亚洲成综合人影院在院播放 | 好男人资源在线观看免费的 | 五月天国产视频 | 日韩拍拍拍 | 久久久免费观成人影院 | 99久久精品在免费线18 | 天堂一区二区在线观看 | 国产美女屁股直流白浆视频无遮挡 | 四虎网站最新网址 | 第一次破学生处破 | 日剧整部剧护妻狂魔免费观看全集 | 午夜一区二区免费视频 | 99福利网| 国产精品亚洲精品日韩已满 | 日韩久久网 | 亚洲无限观看 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 青青草成人在线观看 | 91混血大战上海双胞胎 | 亚洲色图欧美偷拍 | 国产精品久久久久久网站 | 欧美精品国产第一区二区 | 国产成人精品一区二区阿娇陈冠希 | 日朝欧美亚洲精品 | 国产亚洲玖玖玖在线观看 | 久久日本片精品AAAAA国产 | 青春娱乐国产分类精品二 | 麻豆视频免费在线播放 | 91香蕉国产视频 | 亚州精品视频 | 嫩草影院精品视频在线观看 | www.男人的天堂 | 97网站| 国产趴着打光屁股sp抽打 | 日韩一级精品视频在线观看 | 91视频完整版 | 楚乔传第二部免费完整 | 好硬好大好浪夹得好紧h | 日韩精品一区二区三区中文在线 |