成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

[譯] 設(shè)計(jì)模式:發(fā)布/訂閱模式解析

niuxiaowei111 / 2487人閱讀

摘要:發(fā)布訂閱者模式實(shí)現(xiàn)了松耦合你可以讓發(fā)布者發(fā)布消息,訂閱者接受消息而不是尋找一種方式把兩個(gè)分離的系統(tǒng)連接在一起。這會(huì)導(dǎo)致惡意的消息被發(fā)布,訂閱者能夠獲得他們以前并不能獲得的消息。發(fā)布訂閱模式例子

原文:Design Patterns:PubSub Explained

介紹

這個(gè)模式用來(lái)作為中間人,一個(gè)把發(fā)布者和訂閱者架接在一起的代理。發(fā)布者是當(dāng)完成某些過(guò)程的時(shí)候觸發(fā)事件的對(duì)象,訂閱者是希望當(dāng)發(fā)布者發(fā)布的時(shí)候希望被通知的對(duì)象。

生活中有一個(gè)很好地例子,廣播電臺(tái),人們會(huì)把頻道調(diào)到他們最喜歡的節(jié)目。廣播站不知道觀眾聽(tīng)得是什么或者他們正在聽(tīng)什么。他只需要發(fā)布他們的節(jié)目就可以啦。觀眾也不知道廣播站制作節(jié)目的過(guò)程。他們只要在他們最喜歡的節(jié)目運(yùn)行的時(shí)候把臺(tái)調(diào)到對(duì)應(yīng)的頻道或者告知朋友就行。

發(fā)布/訂閱者模式實(shí)現(xiàn)了松耦合:你可以讓發(fā)布者發(fā)布消息,訂閱者接受消息而不是尋找一種方式把兩個(gè)分離的系統(tǒng)連接在一起。

優(yōu)勢(shì)

松耦合

發(fā)布者不需要知道訂閱者的數(shù)量,訂閱者聽(tīng)得話題或者訂閱者是通過(guò)什么方式運(yùn)行的。他們能夠相互獨(dú)立地運(yùn)行,這樣就可以讓你分開(kāi)開(kāi)發(fā)這兩部分而不需要擔(dān)心對(duì)狀態(tài)或?qū)崿F(xiàn)的任何細(xì)微的影響。

可擴(kuò)展性

發(fā)布/訂閱模式可以讓系統(tǒng)在無(wú)論什么時(shí)候無(wú)法負(fù)載的時(shí)候擴(kuò)展

更干凈地設(shè)計(jì)

充分地利用好發(fā)布/訂閱模式,你不得不深入地思考不同的組件是如何交互的。這通常會(huì)讓我們有更干凈地設(shè)計(jì)因?yàn)槲覀儗?duì)解耦和松耦合的強(qiáng)調(diào)。

靈活性

你不需要擔(dān)心不同的組件是如何組合在一起的。只要他們共同遵守一份協(xié)議

容易測(cè)試

你可以很好地找出發(fā)布者或訂閱者是否會(huì)得到錯(cuò)誤的信息

缺點(diǎn)

發(fā)布/訂閱模式最大的有點(diǎn)是解耦,但同時(shí)也是最大的缺點(diǎn):

中間人也許不會(huì)通知系統(tǒng)消息傳送的狀態(tài)。所以我們無(wú)法知道消息傳送是成功的還是失敗的。緊耦合是需要保證這一點(diǎn)的。

發(fā)布者不知道訂閱者的狀態(tài),反之亦然,這樣的話,你根本不知道在另一端是否會(huì)沒(méi)有問(wèn)題?

隨著訂閱者和發(fā)布者數(shù)量的增加,不斷增加的消息傳送回導(dǎo)致架構(gòu)的不穩(wěn)定,容易在負(fù)載大的時(shí)候出問(wèn)題

攻擊者(惡意的發(fā)布者)能夠入侵系統(tǒng)并且撕開(kāi)它。這會(huì)導(dǎo)致惡意的消息被發(fā)布,訂閱者能夠獲得他們以前并不能獲得的消息。

更新發(fā)布者和訂閱者的關(guān)系會(huì)是一個(gè)很難的問(wèn)題,因?yàn)楫吘顾麄兏静徽J(rèn)識(shí)對(duì)方。

需要中間人/代理商,消息規(guī)范和相關(guān)的規(guī)則會(huì)給系統(tǒng)增加一些復(fù)雜度

結(jié)論

現(xiàn)實(shí)沒(méi)有銀彈,但是這個(gè)模式是設(shè)計(jì)松耦合系統(tǒng)的很好地方式。這和RSS,Atom和PubSubHubbub的思想一樣。

發(fā)布/訂閱模式例子(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           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86135.html

相關(guān)文章

  • [] 你應(yīng)了解的4種JS設(shè)計(jì)模式

    摘要:盡管特定環(huán)境下有各種各樣的設(shè)計(jì)模式,開(kāi)發(fā)者還是傾向于使用一些習(xí)慣性的模式。原型設(shè)計(jì)模式依賴于原型繼承原型模式主要用于為高性能環(huán)境創(chuàng)建對(duì)象。對(duì)于一個(gè)新創(chuàng)建的對(duì)象,它將保持構(gòu)造器初始化的狀態(tài)。這樣做主要是為了避免訂閱者和發(fā)布者之間的依賴。 2016-10-07 每個(gè)JS開(kāi)發(fā)者都力求寫(xiě)出可維護(hù)、復(fù)用性和可讀性高的代碼。隨著應(yīng)用不斷擴(kuò)大,代碼組織的合理性也越來(lái)越重要。設(shè)計(jì)模式為特定環(huán)境下的常見(jiàn)...

    awokezhou 評(píng)論0 收藏0
  • 】RabbitMQ系列(三) - 發(fā)布/訂閱模式

    摘要:發(fā)布訂閱模式在之前的文章里,創(chuàng)建了。我們稱之為發(fā)布訂閱模式。其實(shí)我們是用到了默認(rèn)的,用空字符串來(lái)標(biāo)識(shí)。空字符串代表了沒(méi)有名字的被路由到了由指定名字的。和這種關(guān)系的建立我們稱之為從現(xiàn)在開(kāi)始這個(gè)就會(huì)將推向我們的隊(duì)列了。 發(fā)布訂閱模式 在之前的文章里,創(chuàng)建了work queue。work queue中,每一個(gè)task都會(huì)派發(fā)給一個(gè)worker。在本章中,我們會(huì)完成完全不一樣的事情 - 我們會(huì)...

    WrBug 評(píng)論0 收藏0
  • []簡(jiǎn)單的用javascript實(shí)現(xiàn)的數(shù)據(jù)雙向綁定

    摘要:許多流行的框架,像或者都會(huì)把雙向數(shù)據(jù)綁定作為其中的主要特性來(lái)宣傳。盡管有好多種方式去實(shí)現(xiàn)這幾點(diǎn),一種簡(jiǎn)單高效的方法是我們通過(guò)發(fā)布訂閱者模式來(lái)實(shí)現(xiàn)。方法很簡(jiǎn)單我們可以使用定制的屬性作為代碼中需要綁定的屬性。 原文:Easy Two-Way Data Binding in Javascript 雙向數(shù)據(jù)綁定指的是當(dāng)對(duì)象的屬性發(fā)生變化時(shí)能夠同時(shí)改變對(duì)應(yīng)的UI,反之亦然。換句話說(shuō),如果我們有一...

    pf_miles 評(píng)論0 收藏0
  • []為什么前端初學(xué)者必須要明白發(fā)布訂閱模式

    摘要:應(yīng)用需要正確并合適響應(yīng)各種網(wǎng)絡(luò)請(qǐng)求用戶操作計(jì)時(shí)事件和各種延時(shí)動(dòng)作。好了,我們的新流程圖畫(huà)出來(lái)了提示城市名稱查找不是很復(fù)雜,谷歌地圖為此提供了非常簡(jiǎn)單的。形象點(diǎn)表示就是,函數(shù)是一等公民。 By Hubert Zub | Oct 3, 2018 原文 當(dāng)你將關(guān)注點(diǎn)從樣式,美學(xué)和網(wǎng)格系統(tǒng)轉(zhuǎn)移到邏輯,框架和編寫(xiě)JavaScript代碼時(shí)。一切都開(kāi)始了,你會(huì)發(fā)現(xiàn)你處于你的web開(kāi)發(fā)歷程中最激動(dòng)人...

    miqt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<