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