在Java中實現回撥過程 (轉)
在中實現回撥過程:namespace prefix = o ns = "urn:schemas--com::office" />
在Java使用介面來實現同樣功能的回撥
摘要:
Java介面提供了一個很好的方法來實現回撥函式。如果你習慣於在事件的模型中,透過傳遞函式指標來方法達到目的的話,那麼你就會喜歡這個技巧。
作者:John D. Mitchell
在MS-或者X-Window的事件驅動模型中,當某些事件發生的時候,開發人員已經熟悉透過傳遞函式指標來呼叫處理方法。而在Java的面向的模型中,不能支援這種方法,因而看起來好像排除了使用這種比較舒服的機制,但事實並非如此。
Java的介面提供了一種很好的機制來讓我們達到和回撥相同的效果。這個訣竅就在於定一個簡單的介面,在介面之中定義一個我們希望呼叫的方法。
舉個例子來說,假設當一個事件發生的時候,我們想它被通知,那麼我們定義一個介面:
public interface InterestingEvent
{
// This is just a regular method so it can return something or
// take arguments if you like.
public void interestingEvent ();
}
這就給我們一個控制實現了該介面的所有類的物件的控制點。因此,我們不需要關心任何和自己相關的其它外界的型別資訊。這種方法比C函式更好,因為在C++風格的程式碼中,需要指定一個資料域來儲存物件指標,而Java中這種實現並不需要。
發出事件的類需要物件實現InterestingEvent介面,然後呼叫介面中的interestingEvent ()方法。
public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
// Save the event for later use.
= event;
// Nothing to report yet.
somethingHappened = false;
}
//...
public void doWork ()
{
// Check the predicate, which is set elsewhere.
if (somethingHappened)
{
// Signal the even by invoking the interface's method.
ie.interestingEvent ();
}
//...
}
// ...
}
在這個例子中,我們使用了somethingHappened這個標誌來跟蹤是否事件應該被激發。在許多事例中,被呼叫的方法能夠激發interestingEvent()方法才是正確的。
希望收到事件通知的程式碼必須實現InterestingEvent介面,並且正確的傳遞自身的引用到事件通知器。
public class CallMe implements InterestingEvent
{
private EventNotifier en;
public CallMe ()
{
// Create the event notifier and pass ourself to it.
en = new EventNotifier (this);
}
// Define the actual handler for the event.
public void interestingEvent ()
{
// Wow! Something really interesting must have occurred!
// Do something...
}
//...
}
希望這點小技巧能給你帶來方便。
關於作者:
John D. Mitchell在過去的九年內一直做顧問,曾經在Geoworks使用OO語言開發了PDA,興趣於寫,Tcl/Tk和Java系統。和人合著了《Making Sense of Java》,目前從事Java編譯器的工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956797/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用 Java 實現回撥例程 (轉)Java
- 【JavaSE】java實現閉包與回撥Java
- 在應用程式中實現RAS撥號 (轉)
- C++中實現回撥機制的幾種方式[轉]C++
- 用匿名內部類實現 Java 同步回撥Java
- 宣告函式指標並實現回撥 (轉)函式指標
- java介面回撥Java
- Swift 中如何利用閉包實現非同步回撥?Swift非同步
- Android 回撥方法的實現Android
- Java中的閉包(Closure)和回撥Java
- springboot啟動過程中常用的回撥Spring Boot
- kotlin中將回撥改寫為協程Kotlin
- Java——回撥機制Java
- jni回撥java方法Java
- Java--回撥模型Java模型
- java回撥函式Java函式
- java高階用法之:JNA中的回撥Java
- 用Kotlin實現極簡回撥Kotlin
- 在Java中實現遠端方法呼叫(轉)Java
- 理解javascript中的回撥函式(callback)【轉】JavaScript函式
- java回撥函式-非同步回撥-簡明講解Java函式非同步
- java 介面回撥經典案例--網路請求回撥Java
- java中listFiles(Filefilter filter)檔案過濾器的實現過程JavaFilter過濾器
- 夯實Java基礎系列11:深入理解Java中的回撥機制Java
- java 回撥函式示例Java函式
- 在c中,怎麼註冊回撥函式函式
- mysql5中使用過程實現行轉列MySql
- 在java中實現對FORM的列印功能 (轉)JavaORM
- java回撥函式機制Java函式
- Java回撥機制解讀Java
- Java回撥函式的理解Java函式
- C語言回撥日誌庫的實現C語言
- 回撥函式快速使用 (轉)函式
- puppeteer在開發過程中的實踐
- 在DELPHI程式中撥號上網 (轉)
- 在Dash中更靈活地編寫回撥函式函式
- jQuery:在一個回撥中處理多個請求jQuery
- Java影像灰度化的實現過程解析Java