經常聽到回調函數(callback function)這個概念, 所謂回調函數,就是指這個函數先在某處注冊,而它將在稍后某個需要的時候被調用。
C++中怎么來實現呢?當然,C++兼容C,用函數指針就可以。 同時C++又提供了面向對象的機制,可不可以有不同的實現機制呢? 當然! STL 中的functor(Function object)就可以用到回調上。 比如對一個存放int數據的vector進行遞減排序的話,我們可以這樣進行。
sort(vec.begin(),vec.end(),greater<int>());
greater<int>()
就是我們傳遞的一個匿名對象,它重載了函數調用運算符“()”。我們沒有顯式地調用這個對象里面提供的函數,sort函數對對象里面的函數進行call back。
java中要實現類似functor的功能,應該怎么辦呢?Command模式可以幫上忙。Command模式看起來很簡單,只要把command封裝到一個接口中就可以。Command模式是回調機制的一個面向對象的替代品。
比如 java.io 中已經定義好的一個接口
public interface FilenameFilter {
boolean accept(File dir, String name);
}
這個FilenameFilter就是Command,實現Command的類就是ConcreteCommand。這個接口所聲明的操作 "accept" 就是看看目錄dir中的文件name是否滿足某種要求,假如滿足就返回true,否則就返回false。這個要求是什么呢?你要對這個接口進行實現。
因此,我們就可以這樣做了:
File file = new File(".");
String[] list = file.list(new DirFilter("wf"));
新聞熱點
疑難解答