我想開發一個基於處理某些事件並生成數據的系統。每個事件將包含(可能)幾個不同的字段,每個偵聽器將處理一些或他們。我心目中Java - 事件處理設計
以下兩種方法在事件代班,我會註冊多個事件監聽器,每個監聽事件的特定領域的一個特定值,例如:
public class MicroListener implements Listener { public void processEvent(Event e){ if(e.getName().equals(registeredName)) { ... } }
這很誘人,因爲處理是在對象本身內完成的,沒有集中處理事件,而是允許每個對象處理信息。這個缺點可能是致命的,事實是每個事件(超過幾十萬)將不得不向所有聽衆廣播,而只有很小的一部分會真正做到這一點。它可能會產生從長遠來看有很大的性能損失...
集中式監聽器,在所有的事件,這將傾聽並採取行動,並委託處理相應的事件處理器,例如:
public class CentralListener implements Listener { Map<String, Processor> processorsByName; public void processEvent(Event e){ processorsByName.get(e.getName()).process(e); } }
這會更快,但它會需要單獨的地圖或處理器的集合用於事件的任何其他部分,例如檢查事件ID等的處理器。方法1中不是這種情況,因爲我們只是生成另一組偵聽器並將它們註冊到事件生成類。
你們對這些有什麼看法?他們是有道理的,還是你會建議完全不同的?