国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺談發(fā)布訂閱模式與觀察者模式

2024-05-06 15:40:57
字體:
供稿:網(wǎng)友

背景

設(shè)計模式并非是軟件開發(fā)的專業(yè)術(shù)語,實際上,“模式”最早誕生于建筑學(xué)。

設(shè)計模式的定義是:在面向?qū)ο筌浖O(shè)計過程中針對特定問題的簡潔而優(yōu)雅的解決方案。通俗一點說,設(shè)計模式是在某種場合下對某個問題的一種解決方案。如果再通俗一點說,設(shè)計模式就是給面向?qū)ο筌浖_發(fā)中的一些好的設(shè)計取個名字。

這些“好的設(shè)計”并不是誰發(fā)明的,而是早已存在于軟件開發(fā)中。一個稍有經(jīng)驗的程序員也許在不知不覺中數(shù)次使用過這些設(shè)計模式。GoF(Gang of Four--四人組,《設(shè)計模式》幾位作者)最大的功績是把這些“好的設(shè)計”從浩瀚的面向?qū)ο笫澜缰刑暨x出來,并且給予它們一個好聽又好記的名字。

設(shè)計模式并不直接用來完成代碼的編寫,而是描述在各種不同情況下,要怎么解決問題的一種方案,他不是一個死的機制,他是一種思想,一種寫代碼的形式。每種語言對于各種設(shè)計模式都有他們自己的實現(xiàn)方式,對于某些設(shè)計模式來說,可能在某些語言下并不適用,比如工廠方法模式對于javascript。模式應(yīng)該用在正確的地方。而哪些才算正確的地方,只有在我們深刻理解了模式的意圖之后,再結(jié)合項目的實際場景才會知道。。

模式的社區(qū)一直在發(fā)展。GoF在1995年提出了23種設(shè)計模式,但模式不僅僅局限于這23種,后面增加到了24種。在這20多年的時間里,也許有更多的模式已經(jīng)被人發(fā)現(xiàn)并總結(jié)了出來,比如一些JavaScript 圖書中會提到模塊模式、沙箱模式等。這些“模式”能否被世人公認并流傳下來,還有待時間驗證。

觀察者模式(Observer Pattern)

觀察者模式定義了對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都將得到通知,并自動更新。觀察者模式屬于行為型模式,行為型模式關(guān)注的是對象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。

觀察者模式有一個別名叫“發(fā)布-訂閱模式”,或者說是“訂閱-發(fā)布模式”,訂閱者和訂閱目標(biāo)是聯(lián)系在一起的,當(dāng)訂閱目標(biāo)發(fā)生改變時,逐個通知訂閱者。我們可以用報紙期刊的訂閱來形象的說明,當(dāng)你訂閱了一份報紙,每天都會有一份最新的報紙送到你手上,有多少人訂閱報紙,報社就會發(fā)多少份報紙,報社和訂報紙的客戶就是上面文章開頭所說的“一對多”的依賴關(guān)系。

發(fā)布訂閱模式(Pub-Sub Pattern)

其實24種基本的設(shè)計模式中并沒有發(fā)布訂閱模式,上面也說了,他只是觀察者模式的一個別稱。

但是經(jīng)過時間的沉淀,似乎他已經(jīng)強大了起來,已經(jīng)獨立于觀察者模式,成為另外一種不同的設(shè)計模式。

在現(xiàn)在的發(fā)布訂閱模式中,稱為發(fā)布者的消息發(fā)送者不會將消息直接發(fā)送給訂閱者,這意味著發(fā)布者和訂閱者不知道彼此的存在。在發(fā)布者和訂閱者之間存在第三個組件,稱為消息代理或調(diào)度中心或中間件,它維持著發(fā)布者和訂閱者之間的聯(lián)系,過濾所有發(fā)布者傳入的消息并相應(yīng)地分發(fā)它們給訂閱者。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 平阴县| 金塔县| 车致| 玛沁县| 高雄县| 合江县| 噶尔县| 桃江县| 嘉黎县| 新邵县| 青川县| 扶风县| 礼泉县| 晋江市| 睢宁县| 湟源县| 武山县| 钟祥市| 安阳县| 庄河市| 嘉黎县| 托克逊县| 龙川县| 定州市| 闵行区| 九江市| 西畴县| 吉安县| 荥阳市| 伊川县| 瓦房店市| 临邑县| 鸡东县| 沙河市| 中西区| 高平市| 安义县| 江北区| 新乐市| 新民市| 伊通|