Event-Listerner事件監聽模式

banq發表於2009-08-14

事件監聽模式其實就是一種觀察者模式,只是角度有點不同,在Java的JavaBean機制以及GUI中都使用了事件監聽模式。在如今AJAX RIA客戶端中,事件監聽模式也成為一個主要的介面模式。

事件監聽模式分同步和非同步兩種實現方式,JavaBean機制和GUI基本都是同步機制,事件監聽非同步模型,需要引入Event Queue。

事件監聽同步模式分兩個部分:Event Source和Event Listener:
Event Source:被監聽者的事件集合,可能是方法,提供事件的註冊加入和移除功能。類似被觀察者的集合。
Event Listener:事件的監聽者,當事件被觸發,所有監聽這個事件的監聽者將被通知,然後執行自己的Action響應動作。

事件監聽非同步模式在Source和Listener之間引入event queue,
event queue是一個基於事件的publish-subscribe. 它一種松耦合方式提供不同模組和角色之間非同步通訊。它比同步更加松耦合,這樣,我們就把Source-Listener改成了publish-queue-subscribe方式。

事件監聽模式使用在客戶端RIA比較多,因為這裡是使用者輸入的源頭,是事件發生的源頭。而且在目前WOA趨勢下,事件監聽模式不能只單獨侷限於RIA客戶端這個範圍,還需要把事件透過http形式傳遞到伺服器端,也就是跨客戶端和伺服器的,事件必須和伺服器的PUSH非同步結合在一起。這是一種先進的架構設計。

基於Javascript的ZK 5 RIA已經實現了這種先進的事件監聽模式,見:

http://docs.zkoss.org/wiki/ZK_5:_Chat_with_Event_QueueEvent_queues_and_server_push

如果將這種非同步的事件模式和伺服器的OSGI結合,那麼在伺服器端更新一個Jar模組,可以主動通知到客戶端瀏覽器,
這對伺服器端模組管理很有好處。

http://bundle-exception.blogspot.com/2009/07/zk-on-osgi-dynamic-asynchronous.html

相關文章