摘要:觀察者模式屬于行為型模式,用于建立一種對(duì)象與對(duì)象之間的依賴關(guān)系,一個(gè)對(duì)象發(fā)生改變時(shí)將自動(dòng)通知其他對(duì)象,其他對(duì)象將相應(yīng)作出反應(yīng)。
Rxjs_觀察者模式和發(fā)布訂閱模式 設(shè)計(jì)模式
撿起大學(xué)所學(xué)的《設(shè)計(jì)模式》吧 Orz
觀察者模式和發(fā)布訂閱模式特別容易被人們混淆,很多書里面也將這兩個(gè)概念混為一談,所以首先要搞清楚這兩種模式的區(qū)別。
觀察者模式╭─────────────╮ Fire Event ╭──────────────╮ │ │─────────────>│ │ │ Subject │ │ Observer │ │ │<─────────────│ │ ╰─────────────╯ Subscribe ╰──────────────╯
觀察者其模式實(shí)很好理解,模式中只有兩種角色,觀察者和被觀察者。
觀察者模式屬于行為型模式,用于建立一種對(duì)象與對(duì)象之間的依賴關(guān)系,一個(gè)對(duì)象發(fā)生改變時(shí)將自動(dòng)通知其他對(duì)象,其他對(duì)象將相應(yīng)作出反應(yīng)。
Subject(目標(biāo)) 目標(biāo)又稱為主題,它是指被觀察的對(duì)象。
Observer(觀察者) 觀察者將對(duì)觀察目標(biāo)的改變做出反應(yīng)
代碼例子:jQuery
function refresh() { $("div").empty().text("you are stupid.") $("div").trigger("refresh") } ... $("div").on("refresh", () => { $("span").empty().text("go to find it.") })發(fā)布-訂閱模式
╭─────────────╮ ╭───────────────╮ Fire Event ╭──────────────╮ │ │ Publish Event │ │───────────────>│ │ │ Publisher │────────────────>│ Event Channel │ │ Subscriber │ │ │ │ │<───────────────│ │ ╰─────────────╯ ╰───────────────╯ Subscribe ╰──────────────╯
發(fā)布訂閱模式屬于廣義上的觀察者模式
發(fā)布訂閱模式與觀察者模式非常接近,僅僅只是多了一個(gè)中間層用于管理消息(信息通道),可以看成是一種優(yōu)化的觀察者模式。
生活中有一個(gè)很好的例子——廣播電臺(tái),人們會(huì)把頻道調(diào)到他們最喜歡的節(jié)目。廣播站不知道觀眾聽得是什么或者他們正在聽什么,只需要發(fā)布他們的節(jié)目就可以了。而觀眾也不知道廣播站制作節(jié)目的過程,他們只要在他們最喜歡的節(jié)目運(yùn)行的時(shí)候把臺(tái)調(diào)到對(duì)應(yīng)的頻道或者告知朋友就行。
觀察者模式和發(fā)布-訂閱模式的比較兩者的比較如下圖所示:
觀察者模式
必須知道具體的 Subject,兩者可以直接聯(lián)系
緊耦合
大多數(shù)是同步的
在單個(gè)應(yīng)用程序地址空間中實(shí)現(xiàn)
發(fā)布訂閱模式
無直接依賴關(guān)系,通過消息代理
松耦合
大多數(shù)是異步的(使用消息隊(duì)列)
交叉應(yīng)用模式
參考鏈接《對(duì)象間的聯(lián)動(dòng)——觀察者模式(二) - 設(shè)計(jì)模式之行為型模式 - 極客學(xué)院 Wiki》
《設(shè)計(jì)模式:發(fā)布/訂閱模式解析 - 記錄技術(shù)的點(diǎn)滴 - SegmentFault 思否》
《觀察者模式和發(fā)布訂閱模式有什么不同? - 知乎》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100859.html
摘要:是的縮寫,起源于,是一個(gè)基于可觀測(cè)數(shù)據(jù)流結(jié)合觀察者模式和迭代器模式的一種異步編程的應(yīng)用庫。是基于觀察者模式和迭代器模式以函數(shù)式編程思維來實(shí)現(xiàn)的。學(xué)習(xí)之前我們需要先了解觀察者模式和迭代器模式,還要對(duì)流的概念有所認(rèn)識(shí)。 RxJS 是 Reactive Extensions for JavaScript 的縮寫,起源于 Reactive Extensions,是一個(gè)基于可觀測(cè)數(shù)據(jù)流 Stre...
摘要:發(fā)布通過回調(diào)方法向發(fā)布事件。觀察者一個(gè)回調(diào)函數(shù)的集合,它知道如何去監(jiān)聽由提供的值。 本文目錄 一、項(xiàng)目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) 2.編寫服務(wù) 五、引入RxJS 1.關(guān)于RxJS 2.引入RxJS 3.改造數(shù)據(jù)獲取方式 六、改造組件 1.添...
摘要:隨著前端應(yīng)用的復(fù)雜度越來越高,如何管理應(yīng)用的數(shù)據(jù)已經(jīng)是一個(gè)不可回避的問題。應(yīng)用的數(shù)據(jù)不是只有狀態(tài)的,還有事件異步常量等等。出于以上兩點(diǎn)原因,最終決定基于來設(shè)計(jì)一套管理應(yīng)用的狀態(tài)的解決方案。 隨著前端應(yīng)用的復(fù)雜度越來越高,如何管理應(yīng)用的數(shù)據(jù)已經(jīng)是一個(gè)不可回避的問題。當(dāng)你面對(duì)的是業(yè)務(wù)場(chǎng)景復(fù)雜、需求變動(dòng)頻繁、各種應(yīng)用數(shù)據(jù)互相關(guān)聯(lián)依賴的大型前端應(yīng)用時(shí),你會(huì)如何去管理應(yīng)用的狀態(tài)數(shù)據(jù)呢? 我們認(rèn)為...
摘要:技術(shù)積累經(jīng)過社區(qū)的努力學(xué)習(xí)資料還是很多的,官方中文文檔就已經(jīng)很不錯(cuò),不過我們先從天精通初步感受一下然后配合一些中文文檔來補(bǔ)充知識(shí)點(diǎn),最后再根據(jù)官方文檔來校驗(yàn)整個(gè)知識(shí)體系。資料學(xué)習(xí)操作符的時(shí)候可以對(duì)照彈珠圖的交互彈珠圖的中文版中文文檔 前言 最近準(zhǔn)備畢設(shè),技術(shù)選型的時(shí)候因?yàn)楣δ艿囊恍┬枨鬁?zhǔn)備將RxJs融入到項(xiàng)目中,考慮RxJs的時(shí)候因?yàn)橹暗募夹g(shù)棧還猶豫了一下,查了一些資料以及粗略瀏覽了...
閱讀 3466·2019-08-30 15:44
閱讀 808·2019-08-30 13:46
閱讀 2097·2019-08-30 11:05
閱讀 3344·2019-08-29 18:32
閱讀 2165·2019-08-29 13:56
閱讀 1304·2019-08-29 12:57
閱讀 770·2019-08-28 18:21
閱讀 1755·2019-08-26 12:16