學習消息總線的體會!

   今天抽了點時間學習了下OperaMasks的消息總線,感覺它這個總體的設計思路還是非常棒,值得我們學習。
   讓我體會最深得一點就是解耦,用裏面的比喻,就是演講者(事件源)與聽衆(事件監聽者)的解耦。
   以前我在做基於構件的編程的時候,經常碰到的一個問題:一個事件源,而多個監聽者要求去監聽的時候,都必須把這個事件源的句柄給給引入進來。這就造成了代碼的耦合度不好,而且不利於擴展。舉例如下:
   一個按鈕  <mx:Button id='button'  label='Helloworld!' width='100'/>
   如果我有好幾個監聽器要對此button進行監聽,那麼我們要做的就是在每個監聽器上給加上這個button的句柄:
   button.addEventListener(MouseEvent.CLICK,eventhandle(event));
   如果你是用pureMVC,更能體會到這點的不便之處。
   OperaMasks的消息總線針對這一點進行了改進,它將事件源與監聽者完全分開,即:事件源只管發事件,誰愛監聽誰監聽。不再需要句柄,完全解耦。舉例如下:
   頁面:
   <f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
   xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
   renderKitId="AJAX">
   <w:page title="apply fee">
     <w:form>
       <layout:panelGrid columns="2">
         <w:textField id="money"></w:textField>
         <w:button id="apply" />
       </layout:panelGrid>
     </w:form>
   </w:page>
   </f:view>
  
   事件源:
    @ManagedBean(name="projectManagerBean", scope=ManagedBeanScope.SESSION)
   public class ProjectManagerBean {
        @EventListener("applyFee")
        private void applyFeeListener(int money) {
            System.out.println("I'm your project manager, you apply " + money + " money.");
        }
    }
  
  
   事件監聽者:
   @ManagedBean(name="projectManagerBean", scope=ManagedBeanScope.SESSION)
   public class ProjectManagerBean {
       @EventListener("applyFee")
       private void applyFeeListener(int money) {
           System.out.println("I'm your project manager, you apply " + money + " money.");
       }
   }
  
   一個事件源對要添加多個監聽器,非常的簡單,方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章