摘要:發布訂閱者模式實現了松耦合你可以讓發布者發布消息,訂閱者接受消息而不是尋找一種方式把兩個分離的系統連接在一起。這會導致惡意的消息被發布,訂閱者能夠獲得他們以前并不能獲得的消息。發布訂閱模式例子
介紹原文:Design Patterns:PubSub Explained
這個模式用來作為中間人,一個把發布者和訂閱者架接在一起的代理。發布者是當完成某些過程的時候觸發事件的對象,訂閱者是希望當發布者發布的時候希望被通知的對象。
生活中有一個很好地例子,廣播電臺,人們會把頻道調到他們最喜歡的節目。廣播站不知道觀眾聽得是什么或者他們正在聽什么。他只需要發布他們的節目就可以啦。觀眾也不知道廣播站制作節目的過程。他們只要在他們最喜歡的節目運行的時候把臺調到對應的頻道或者告知朋友就行。
發布/訂閱者模式實現了松耦合:你可以讓發布者發布消息,訂閱者接受消息而不是尋找一種方式把兩個分離的系統連接在一起。
優勢松耦合
發布者不需要知道訂閱者的數量,訂閱者聽得話題或者訂閱者是通過什么方式運行的。他們能夠相互獨立地運行,這樣就可以讓你分開開發這兩部分而不需要擔心對狀態或實現的任何細微的影響。
可擴展性
發布/訂閱模式可以讓系統在無論什么時候無法負載的時候擴展
更干凈地設計
充分地利用好發布/訂閱模式,你不得不深入地思考不同的組件是如何交互的。這通常會讓我們有更干凈地設計因為我們對解耦和松耦合的強調。
靈活性
你不需要擔心不同的組件是如何組合在一起的。只要他們共同遵守一份協議
容易測試
你可以很好地找出發布者或訂閱者是否會得到錯誤的信息
缺點發布/訂閱模式最大的有點是解耦,但同時也是最大的缺點:
中間人也許不會通知系統消息傳送的狀態。所以我們無法知道消息傳送是成功的還是失敗的。緊耦合是需要保證這一點的。
發布者不知道訂閱者的狀態,反之亦然,這樣的話,你根本不知道在另一端是否會沒有問題?
隨著訂閱者和發布者數量的增加,不斷增加的消息傳送回導致架構的不穩定,容易在負載大的時候出問題
攻擊者(惡意的發布者)能夠入侵系統并且撕開它。這會導致惡意的消息被發布,訂閱者能夠獲得他們以前并不能獲得的消息。
更新發布者和訂閱者的關系會是一個很難的問題,因為畢竟他們根本不認識對方。
需要中間人/代理商,消息規范和相關的規則會給系統增加一些復雜度
結論現實沒有銀彈,但是這個模式是設計松耦合系統的很好地方式。這和RSS,Atom和PubSubHubbub的思想一樣。
發布/訂閱模式例子(Javascript)
var makePubSub=function(){ var callbacks={}, publish=function(){ //Turn arguments object into real array var args=Array.prototype.slice.call(arguments,0); //Extract the event name which is the first entry var ev=args.shift(); //Return if callbacks object doesn"t contain //any entry for event var list,i,l; if(!callbacks[ev]){ return this; } list=callbacks[ev]; //Invoke the callbacks,passing in the rest of parameters for(i=0,l=list.length;i
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86135.html
摘要:盡管特定環境下有各種各樣的設計模式,開發者還是傾向于使用一些習慣性的模式。原型設計模式依賴于原型繼承原型模式主要用于為高性能環境創建對象。對于一個新創建的對象,它將保持構造器初始化的狀態。這樣做主要是為了避免訂閱者和發布者之間的依賴。 2016-10-07 每個JS開發者都力求寫出可維護、復用性和可讀性高的代碼。隨著應用不斷擴大,代碼組織的合理性也越來越重要。設計模式為特定環境下的常見...
摘要:發布訂閱模式在之前的文章里,創建了。我們稱之為發布訂閱模式。其實我們是用到了默認的,用空字符串來標識??兆址砹藳]有名字的被路由到了由指定名字的。和這種關系的建立我們稱之為從現在開始這個就會將推向我們的隊列了。 發布訂閱模式 在之前的文章里,創建了work queue。work queue中,每一個task都會派發給一個worker。在本章中,我們會完成完全不一樣的事情 - 我們會...
摘要:許多流行的框架,像或者都會把雙向數據綁定作為其中的主要特性來宣傳。盡管有好多種方式去實現這幾點,一種簡單高效的方法是我們通過發布訂閱者模式來實現。方法很簡單我們可以使用定制的屬性作為代碼中需要綁定的屬性。 原文:Easy Two-Way Data Binding in Javascript 雙向數據綁定指的是當對象的屬性發生變化時能夠同時改變對應的UI,反之亦然。換句話說,如果我們有一...
摘要:應用需要正確并合適響應各種網絡請求用戶操作計時事件和各種延時動作。好了,我們的新流程圖畫出來了提示城市名稱查找不是很復雜,谷歌地圖為此提供了非常簡單的。形象點表示就是,函數是一等公民。 By Hubert Zub | Oct 3, 2018 原文 當你將關注點從樣式,美學和網格系統轉移到邏輯,框架和編寫JavaScript代碼時。一切都開始了,你會發現你處于你的web開發歷程中最激動人...
閱讀 2181·2021-11-19 09:55
閱讀 2637·2021-11-11 16:55
閱讀 3175·2021-09-28 09:36
閱讀 1945·2021-09-22 16:05
閱讀 3270·2019-08-30 15:53
閱讀 1806·2019-08-30 15:44
閱讀 2899·2019-08-29 13:10
閱讀 1339·2019-08-29 12:30