学习消息总线的体会!

   今天抽了点时间学习了下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.");
       }
   }
  
   一个事件源对要添加多个监听器,非常的简单,方便。

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