成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Rxjs】Rxjs_觀察者模式和發(fā)布訂閱模式

Java3y / 2522人閱讀

摘要:觀察者模式屬于行為型模式,用于建立一種對(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

相關(guān)文章

  • 察者模式到迭代器模式系統(tǒng)講解 RxJS Observable(一)

    摘要:是的縮寫,起源于,是一個(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...

    notebin 評(píng)論0 收藏0
  • 【CuteJavaScript】Angular6入門項(xiàng)目(3.編寫服務(wù)引入RxJS

    摘要:發(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.添...

    RebeccaZhong 評(píng)論0 收藏0
  • 使用RxJS管理React應(yīng)用狀態(tài)的實(shí)踐分享

    摘要:隨著前端應(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)為...

    KunMinX 評(píng)論0 收藏0
  • RxJS融入React項(xiàng)目

    摘要:技術(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ù)棧還猶豫了一下,查了一些資料以及粗略瀏覽了...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<