熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Dojo訂閱/發布模擬淘寶到貨提醒

2013-11-23 18:56:50  來源: Java核心技術 

  在淘寶我們對某類產品感興趣就會訂閱該產品信息當有貨到後我們會收到提示信息
   
    下面就簡單用Dojo訂閱/發布模式來說明其實現的基本原理
   
  大概功能需求
   
    買家先在產品中心注冊說自己對衣服等感興趣接著產品中心發布了一條新信息衣服到新款了親快來采購吧這時買家將立即收到這條消息並顯示出來(在本例中就是在firefox浏覽器的firebug模擬控制台輸出這條新信息)然後買家可能對別的信息感興趣再次訂閱等等重復上述過程最後買家不打算再訂閱衣服信息了就在產品中心取消了對衣服信息的注冊大概流程就是這樣子的
   
    果斷上代碼看效果然後再來分析!
   
[javascript]
   
    <%@ Page Language=C# AutoEventWireup=true CodeBehind=DojoSubPubaspxcs Inherits=DojoTestDojoSubPub %>
   
    <!DOCTYPE html PUBLIC //WC//DTD XHTML Transitional//EN transitionaldtd>
   
    <html xmlns=>
   
    <head runat=server>
   
    <title></title>
   
    <% 引入 Dojo%>
   
    <script src=
   
    type=text/javascript></script>
   
    <script type=text/javascript>
   
    //定義一個產品主題列表
   
    var NewsReporter = {
   
    clothes: function (message) {
   
    for (var i = ; i < messagelength; i++) {
   
    (淘寶掌櫃訂閱提醒 + message[i])
   
    }
   
    }
   
    shoes: function (message) {
   
    for (var i = ; i < messagelength; i++) {
   
    (淘寶掌櫃訂閱提醒 + message[i])
   
    }
   
    }
   
    mixed: function (clothes shoes) {
   
    (混合訂閱提醒
   
    thisclothes(clothes)
   
    thisshoes(shoes)
   
    }
   
    }
   
    //訂閱衣服信息
   
    handle = dojosubscribe(clothes news NewsReporter clothes
   
    //訂閱鞋子信息
   
    handle = dojosubscribe(shoes news NewsReporter shoes
   
    //訂閱衣服和鞋子信息
   
    dojosubscribe(mixed news NewsReporter mixed
   
    //發布信息
   
    dojopublish(clothes news [[衣服到新款了親快來采購吧!]])
   
    dojopublish(shoes news [[鞋子到新款了親快來采購吧!]])
   
    dojopublish(mixed news [[衣服到新款了快來采購吧!] [鞋子到新款了快來采購吧!]])
   
    //取消訂閱
   
    dojounsubscribe(handle
   
    dojounsubscribe(handle
   
    //發布信息
   
    dojopublish(clothes news [[衣服到新款了親快來采購吧!]])
   
    dojopublish(shoes news [[鞋子到新款了親快來采購吧!]])
   
    dojopublish(mixed news [[衣服到新款了快來采購吧!] [鞋子到新款了快來采購吧!]])
   
    </script>
   
    </head>
   
    <body>
   
    </body>
   
    </html>
   
    <%@ Page Language=C# AutoEventWireup=true CodeBehind=DojoSubPubaspxcs Inherits=DojoTestDojoSubPub %>
   
    <!DOCTYPE html PUBLIC //WC//DTD XHTML Transitional//EN transitionaldtd>
   
    <html xmlns=>
   
    <head runat=server>
   
    <title></title>
   
    <% 引入 Dojo%>
   
    <script src=
   
    type=text/javascript></script>
   
    <script type=text/javascript>
   
    //定義一個產品主題列表
   
    var NewsReporter = {
   
    clothes: function (message) {
   
    for (var i = ; i < messagelength; i++) {
   
    (淘寶掌櫃訂閱提醒 + message[i])
   
    }
   
    }
   
    shoes: function (message) {
   
    for (var i = ; i < messagelength; i++) {
   
    (淘寶掌櫃訂閱提醒 + message[i])
   
    }
   
    }
   
    mixed: function (clothes shoes) {
   
    (混合訂閱提醒
   
    thisclothes(clothes)
   
    thisshoes(shoes)
   
    }
   
    }
   
    //訂閱衣服信息
   
    handle = dojosubscribe(clothes news NewsReporter clothes
   
    //訂閱鞋子信息
   
    handle = dojosubscribe(shoes news NewsReporter shoes
   
    //訂閱衣服和鞋子信息
   
    dojosubscribe(mixed news NewsReporter mixed
   
    //發布信息
   
    dojopublish(clothes news [[衣服到新款了親快來采購吧!]])
   
    dojopublish(shoes news [[鞋子到新款了親快來采購吧!]])
   
    dojopublish(mixed news [[衣服到新款了快來采購吧!] [鞋子到新款了快來采購吧!]])
   
    //取消訂閱
   
    dojounsubscribe(handle
   
    dojounsubscribe(handle
   
    //發布信息
   
    dojopublish(clothes news [[衣服到新款了親快來采購吧!]])
   
    dojopublish(shoes news [[鞋子到新款了親快來采購吧!]])
   
    dojopublish(mixed news [[衣服到新款了快來采購吧!] [鞋子到新款了快來采購吧!]])
   
    </script>
   
    </head>
   
    <body>
   
    </body>
   
    </html>


    
    在控制台輸出結果如下

  

  訂閱 / 發布模式實現是比較簡單的 dojo 維護了一個主題列表用戶訂閱某一主題時即把此主題及其處理函數添加到主題列表中當有此類主題發布時跟這一主題相關的處理函數會被順序調用
   
    我們上面的代碼就是說明其是如何工作的
   
    在 Dojo 中跟主題訂閱 / 發布有關的函數有三個
   
    dojosubscribe = function(topiccontextmethod)
   
    subscribe 函數用來訂閱某一主題參數 topic 表示主題名字是一個字符串 context 是接收到主題後調用的事件處理函數所在的對象function 是事件處理函數名
   
    dojounsubscribe = function(handle)
   
    取消對於某一主題的訂閱參數 handle 是 dojosubscribe 返回的句柄
   
    dojopublish = function(topic args)
   
    發布某一主題參數 topic 是主題的名字args 表示要傳遞給主題處理函數的參數它是一個數組可以通過它傳遞多個參數給事件處理函數
   
    注意點
   
    如果用戶使用了相同的處理函數重復訂閱某一主題兩次在主題列表中這是不同的兩項只是他們都對同一主題感興趣當此類主題發布時這兩個處理函數都會被調用而不會出現第二個處理函數覆蓋第一個處理函數的狀況
   
    先訂閱再發布主題發布的時候訂閱了這一主題的事件處理函數會被立即調用
   
    發布函數的參數為數組發布第一條消息時使用的是[[衣服到新款了親快來采購吧!]]這是一個二維數組因為事件處理函數 NewsReporterclothesNewsReportershoes以及 NewsReportermixed 的參數已經是一個數組所以在發布時必須把消息事件這個數組再放在另一個數組中才能傳遞給這些事件處理函數 mixed 消息的處理函數有兩個參數所以發布 mixed 的消息時參數為
   
    [[衣服到新款了快來采購吧!] [鞋子到新款了快來采購吧!]]
   
    二維數組中的第一個數組表示衣服第二個數組表示鞋子
   
    取消訂閱時必須把所有的訂閱都取消重復的訂閱行為返回的句柄是不一樣的在本例中 handle 和 handle 是不同的必須都注銷只有在 handle 和 handle 都被注銷後產品中心發布的消息才不會被這個買家接收到
   
    總結
   
    如果你對設計模式有所了解會發現Dojo訂閱/發布與《觀察者模式》非常相似
   
    Dojo 提供的訂閱/發布模式可以看作是一個預訂系統使得事件源和事件處理函數並不直接關聯用戶先預定自己感興趣的主題當此類主題發布時將在第一時間得到通知在訂閱/發布模式下預訂的時候並不確定此類主題是否已存在以後是否會發布只是在主題發布之後會立即得到通知訂閱/發布模式是靠主題把事件和事件處理函數聯系起來的


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26027.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.