转自:《http://ccckmit.wikidot.com/ja:listener》
專案下載:Listener.zip
簡介
在 Java 當中沒有像 C# 當中的委派 (delegate) 語法,所有的委派任務都交由一種稱為 Listener 的物件完成,其實作方法乃是利用 Register - Callback 的反向呼叫機制,為了說明這個機制的原理,我們撰寫了以下的程式,以便說明 Listener - Callback 的實作原理。
程式範例
檔案:Listener.java
interface Listener { void onEvent(String str); }
檔案:EventListener.java
public class EventListener implements Listener { String name; public EventListener(String name) { this.name = name; } public void onEvent(String str) { System.out.println(name+":"+str); } }
檔案:Callback.java
import java.util.*; public class Callback { List<Listener> listeners = new ArrayList<Listener>(); public static void main(String[] args) { Callback callback = new Callback(); callback.addListener(new EventListener("Listener 1")); callback.addListener(new EventListener("Listener 2")); callback.addListener(new EventListener("Listener 3")); callback.trigger("Hello!"); callback.trigger("你好!"); } public void addListener(Listener listener) { listeners.add(listener); } public void trigger(String msg) { for (int i=0; i<listeners.size(); i++) { listeners.get(i).onEvent(msg); } } }
執行結果
Listener 1:Hello!
Listener 2:Hello!
Listener 3:Hello!
Listener 1:你好!
Listener 2:你好!
Listener 3:你好!