你好,今天要跟大家分享一些東西,舉例來說這個在JavaScript中用的很多。我要講講回調(callbacks)。你知道什麼時候用,怎麼用這個嗎?你真的理解了它在java環境中的用法了嗎?當我也問我自己這些問題,這也是我開始研究這些的原因。這個背後的想法是控制反轉( PS:維基百科的解釋是控制反轉(Inversion of Control,縮寫為IoC),是物件導向程式設計中的一種設計原則,可以用來減少電腦程式碼之間的耦合度。 you)」為人所知。
簡單的Java裡的回呼模式來理解它,具體的例子在下面:
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 called backall .methodToCallBack(); } public static void main(String[] args) { Caller caller = new Caller(); CallBack callBack = new CallBackImpl(); caller.register(callBack); }}
你可能要問我,什麼時候用這個或會問直接呼叫和回呼機制有什麼不同?
答案是:好吧,這個例子僅僅向你展示了怎樣在java環境中建構這樣的回呼函數。當然用那種方式使用它毫無意義。讓我們現在更深入具體地研究它。
在它之中的思想是控制反轉。讓我們用定時器作為現實中的例子。假設你知道,有一個特別的定時器支援每小時回呼的功能。準確地說是,每小時,定時器會呼叫你註冊的呼叫方法。
具體的例子:
我們想要每小時更新一次網站的時間,以下是範例的UML模型:
回呼接口:
讓我們先定義回調介面:
import java.util.ArrayList;import java.util.List;// For example: Let's assume that this interface is offered from your OS to be implementedinterface TimeUpdaterCallBack { void updateTime(long time); / for example: You want to update your website time every hourclass WebSiteTimeUpdaterCallBack implements TimeUpdaterCallBack { @Override public void updateTime(long time) { // print the updated time anywhere in your website's printlnpletime.out. printlnampletime};
在我們的例子中系統定時器支援回調方法:
// 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(timerCallBacket); // 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 theymerCallBack may have a totally my be // used in different ways by different clients. public void oneHourHasBeenExprired() { for (TimeUpdaterCallBack timerCallBack : callbacks) { timerCallBack.updateTime(System.currentTimeMillis()); }}
最後是我們虛擬簡單的範例中的網站時間更新器:
// 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) { System Systemer SystemTimer = public static voidmain(String[] args) { System Systemer SystemTimer = new Systemer。 webSiteCallBackUpdater = new WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater); }}
原文:http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html