用 Java 實現回撥例程 (轉)
摘要熟悉 MS- 和 X Window System 事件驅動程式設計模型的開發人員,習慣於傳遞在某種事件發生時呼叫(即“回撥”)的函式指標。Java 的面向模型目前並不支援方法指標,這樣似乎就不可能使用這種很好的機制。但我們並不是一點辦法都沒有!
在 支援方法指標之前,Java 介面不能提供一種實現回撥的好方法。如果您習慣於傳遞在事件模型中的指標,則您會喜歡本技巧。
Java 的介面支援提供了一種獲得回撥的等價功能的機制。其技巧就是:定義一個簡單介面,並在該介面中宣告我們要呼叫的方法。
例如,假定我們希望在某個事件發生時得到通知。我們可以定義一個介面:
public interface InterestingEvent
{
// 這僅是一個常規方法。因此如果需要,
// 它可有返回值,也可接收引數。
public void interestingEvent ();
}
這使得我們可以控制實現該介面的類的任何物件。因此,我們不必關心任何外部型別資訊。與在將 C++ 程式碼用於 Motif 時使用視窗小部件的資料域來容納物件指標的難以控制的 C 函式相比,這種方法要好得多。
發出事件訊號的類必須等待實現了 InterestingEvent 介面的物件,並在適當時候呼叫 interestingEvent() 方法。
public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
// 儲存事件物件以備後用。
= event;
// 還沒有要報告的事件。
somethingHappened = false;
}
//...
public void doWork ()
{
// 檢查在別處設定的謂詞。
if (somethingHappened)
{
// 透過呼叫介面的這個方法發出事件訊號。
ie.interestingEvent ();
}
//...
}
// ...
}
在上例中,我使用 somethingHappened 謂詞來跟蹤是否應觸發事件。在許多情況下,呼叫此方法足以保證向 interestingEvent() 發出訊號。
希望接收事件通知的程式碼必須實現 InterestingEvent 介面,並將自身引用傳遞給事件通知。
public class CallMe implements InterestingEvent
{
private EventNotifier en;
public CallMe ()
{
// 建立事件通知程式,並將自身引用傳遞給它。
en = new EventNotifier (this);
}
// 為事件定義實際的處理程式。
public void interestingEvent ()
{
// 噢!必定發生了感興趣的事件!
// 某些操作 ...
}
//...
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Java中實現回撥過程 (轉)Java
- 用匿名內部類實現 Java 同步回撥Java
- 回撥函式、訊息和事件例程 (轉)函式事件
- 【JavaSE】java實現閉包與回撥Java
- 用Kotlin實現極簡回撥Kotlin
- 宣告函式指標並實現回撥 (轉)函式指標
- java介面回撥Java
- Android 回撥方法的實現Android
- Java——回撥機制Java
- jni回撥java方法Java
- Java--回撥模型Java模型
- java回撥函式Java函式
- C++中實現回撥機制的幾種方式[轉]C++
- ASP.NET CORE微信支付回撥示例程式碼ASP.NET
- java回撥函式-非同步回撥-簡明講解Java函式非同步
- java 介面回撥經典案例--網路請求回撥Java
- java 回撥函式示例Java函式
- 在應用程式中實現RAS撥號 (轉)
- 用VC++實現上網撥號功能 (轉)C++
- java回撥函式機制Java函式
- Java回撥機制解讀Java
- Java回撥函式的理解Java函式
- C語言回撥日誌庫的實現C語言
- 回撥函式快速使用 (轉)函式
- java閉包和回撥淺析Java
- Java 回撥機制(CallBack) 趣解Java
- Java介面回撥機制詳解Java
- 回撥函式透徹理解Java函式Java
- 深入淺出Java回撥機制Java
- 不用ATL框架純手工實現COM程式外回撥框架
- Swift 中如何利用閉包實現非同步回撥?Swift非同步
- [JS]回撥函式和回撥地獄JS函式
- 基於Guava API實現非同步通知和事件回撥GuavaAPI非同步事件
- UNIX 系統上實現撥號(轉)
- Java中的閉包(Closure)和回撥Java
- 用500行 Golang 程式碼實現高效能的訊息回撥中介軟體Golang
- 夯實Java基礎系列11:深入理解Java中的回撥機制Java
- JavaScript回撥函式應用淺析JavaScript函式