精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說說你對(duì)發(fā)布訂閱、觀察者模式的理解?區(qū)別?

開發(fā) 前端
觀察者模式定義了對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都將得到通知,并自動(dòng)更新

[[433804]]

文末本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰 。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

一、觀察者模式

觀察者模式定義了對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都將得到通知,并自動(dòng)更新

觀察者模式屬于行為型模式,行為型模式關(guān)注的是對(duì)象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊

例如生活中,我們可以用報(bào)紙期刊的訂閱來形象的說明,當(dāng)你訂閱了一份報(bào)紙,每天都會(huì)有一份最新的報(bào)紙送到你手上,有多少人訂閱報(bào)紙,報(bào)社就會(huì)發(fā)多少份報(bào)紙

報(bào)社和訂報(bào)紙的客戶就形成了一對(duì)多的依賴關(guān)系

實(shí)現(xiàn)代碼如下:

被觀察者模式

  1. class Subject { 
  2.  
  3.   constructor() { 
  4.     this.observerList = []; 
  5.   } 
  6.  
  7.   addObserver(observer) { 
  8.     this.observerList.push(observer); 
  9.   } 
  10.  
  11.   removeObserver(observer) { 
  12.     const index = this.observerList.findIndex(o => o.name === observer.name); 
  13.     this.observerList.splice(index, 1); 
  14.   } 
  15.  
  16.   notifyObservers(message) { 
  17.     const observers = this.observeList; 
  18.     observers.forEach(observer => observer.notified(message)); 
  19.   } 
  20.  

觀察者:

  1. class Observer { 
  2.  
  3.   constructor(name, subject) { 
  4.     this.name = name
  5.     if (subject) { 
  6.       subject.addObserver(this); 
  7.     } 
  8.   } 
  9.  
  10.   notified(message) { 
  11.     console.log(this.name'got message', message); 
  12.   } 

使用代碼如下:

  1. const subject = new Subject(); 
  2. const observerA = new Observer('observerA', subject); 
  3. const observerB = new Observer('observerB'); 
  4. subject.addObserver(observerB); 
  5. subject.notifyObservers('Hello from subject'); 
  6. subject.removeObserver(observerA); 
  7. subject.notifyObservers('Hello again'); 

上述代碼中,觀察者主動(dòng)申請(qǐng)加入被觀察者的列表,被觀察者主動(dòng)將觀察者加入列表

二、發(fā)布訂閱模式

發(fā)布-訂閱是一種消息范式,消息的發(fā)送者(稱為發(fā)布者)不會(huì)將消息直接發(fā)送給特定的接收者(稱為訂閱者)。而是將發(fā)布的消息分為不同的類別,無(wú)需了解哪些訂閱者(如果有的話)可能存在

同樣的,訂閱者可以表達(dá)對(duì)一個(gè)或多個(gè)類別的興趣,只接收感興趣的消息,無(wú)需了解哪些發(fā)布者存在

實(shí)現(xiàn)代碼如下:

  1. class PubSub { 
  2.   constructor() { 
  3.     this.messages = {}; 
  4.     this.listeners = {}; 
  5.   } 
  6.   // 添加發(fā)布者 
  7.   publish(type, content) { 
  8.     const existContent = this.messages[type]; 
  9.     if (!existContent) { 
  10.       this.messages[type] = []; 
  11.     } 
  12.     this.messages[type].push(content); 
  13.   } 
  14.   // 添加訂閱者 
  15.   subscribe(type, cb) { 
  16.     const existListener = this.listeners[type]; 
  17.     if (!existListener) { 
  18.       this.listeners[type] = []; 
  19.     } 
  20.     this.listeners[type].push(cb); 
  21.   } 
  22.   // 通知 
  23.   notify(type) { 
  24.     const messages = this.messages[type]; 
  25.     const subscribers = this.listeners[type] || []; 
  26.     subscribers.forEach((cb, index) => cb(messages[index])); 
  27.   } 

發(fā)布者代碼如下:

  1. class Publisher { 
  2.   constructor(name, context) { 
  3.     this.name = name
  4.     this.context = context; 
  5.   } 
  6.   publish(type, content) { 
  7.     this.context.publish(type, content); 
  8.   } 

訂閱者代碼如下:

  1. class Subscriber { 
  2.   constructor(name, context) { 
  3.     this.name = name
  4.     this.context = context; 
  5.   } 
  6.   subscribe(type, cb) { 
  7.     this.context.subscribe(type, cb); 
  8.   } 

使用代碼如下:

  1. const TYPE_A = 'music'
  2. const TYPE_B = 'movie'
  3. const TYPE_C = 'novel'
  4.  
  5. const pubsub = new PubSub(); 
  6.  
  7. const publisherA = new Publisher('publisherA', pubsub); 
  8. publisherA.publish(TYPE_A, 'we are young'); 
  9. publisherA.publish(TYPE_B, 'the silicon valley'); 
  10. const publisherB = new Publisher('publisherB', pubsub); 
  11. publisherB.publish(TYPE_A, 'stronger'); 
  12. const publisherC = new Publisher('publisherC', pubsub); 
  13. publisherC.publish(TYPE_C, 'a brief history of time'); 
  14.  
  15. const subscriberA = new Subscriber('subscriberA', pubsub); 
  16. subscriberA.subscribe(TYPE_A, res => { 
  17.   console.log('subscriberA received', res) 
  18. }); 
  19. const subscriberB = new Subscriber('subscriberB', pubsub); 
  20. subscriberB.subscribe(TYPE_C, res => { 
  21.   console.log('subscriberB received', res) 
  22. }); 
  23. const subscriberC = new Subscriber('subscriberC', pubsub); 
  24. subscriberC.subscribe(TYPE_B, res => { 
  25.   console.log('subscriberC received', res) 
  26. }); 
  27.  
  28. pubsub.notify(TYPE_A); 
  29. pubsub.notify(TYPE_B); 
  30. pubsub.notify(TYPE_C); 

上述代碼,發(fā)布者和訂閱者需要通過發(fā)布訂閱中心進(jìn)行關(guān)聯(lián),發(fā)布者的發(fā)布動(dòng)作和訂閱者的訂閱動(dòng)作相互獨(dú)立,無(wú)需關(guān)注對(duì)方,消息派發(fā)由發(fā)布訂閱中心負(fù)責(zé)

三、區(qū)別

兩種設(shè)計(jì)模式思路是一樣的,舉個(gè)生活例子:

觀察者模式:某公司給自己?jiǎn)T工發(fā)月餅發(fā)粽子,是由公司的行政部門發(fā)送的,這件事不適合交給第三方,原因是“公司”和“員工”是一個(gè)整體

發(fā)布-訂閱模式:某公司要給其他人發(fā)各種快遞,因?yàn)?ldquo;公司”和“其他人”是獨(dú)立的,其唯一的橋梁是“快遞”,所以這件事適合交給第三方快遞公司解決

上述過程中,如果公司自己去管理快遞的配送,那公司就會(huì)變成一個(gè)快遞公司,業(yè)務(wù)繁雜難以管理,影響公司自身的主營(yíng)業(yè)務(wù),因此使用何種模式需要考慮什么情況兩者是需要耦合的

兩者區(qū)別如下圖:

在觀察者模式中,觀察者是知道Subject的,Subject一直保持對(duì)觀察者進(jìn)行記錄。然而,在發(fā)布訂閱模式中,發(fā)布者和訂閱者不知道對(duì)方的存在。它們只有通過消息代理進(jìn)行通信。

在發(fā)布訂閱模式中,組件是松散耦合的,正好和觀察者模式相反。

觀察者模式大多數(shù)時(shí)候是同步的,比如當(dāng)事件觸發(fā),Subject就會(huì)去調(diào)用觀察者的方法。而發(fā)布-訂閱模式大多數(shù)時(shí)候是異步的(使用消息隊(duì)列)

參考文獻(xiàn)

https://zh.wikipedia.org/zh-hans/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F

https://zh.wikipedia.org/wiki/%E5%8F%91%E5%B8%83/%E8%AE%A2%E9%98%85

https://www.cnblogs.com/onepixel/p/10806891.html

 

https://juejin.cn/post/6978728619782701087

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2020-12-09 05:18:17

面試觀察者訂閱模式

2021-11-25 10:18:42

RESTfulJava互聯(lián)網(wǎng)

2021-08-09 07:47:40

Git面試版本

2020-06-12 15:50:56

options前端服務(wù)器

2020-12-01 08:47:36

Java異常開發(fā)

2021-11-05 07:47:56

代理模式對(duì)象

2021-11-09 08:51:13

模式命令面試

2021-11-10 07:47:49

組合模式場(chǎng)景

2021-11-02 22:04:58

模式

2021-11-03 14:10:28

工廠模式場(chǎng)景

2021-11-11 16:37:05

模板模式方法

2021-11-22 23:50:59

責(zé)任鏈模式場(chǎng)景

2021-08-17 07:15:16

Git RebaseGit Merge面試

2021-08-19 08:36:22

Git ResetGit Revert版本

2021-09-16 07:52:18

算法應(yīng)用場(chǎng)景

2021-10-15 09:53:12

工具

2019-05-10 10:50:04

Spring AOPJDK動(dòng)態(tài)代理CGLIB動(dòng)態(tài)代理

2021-09-07 08:33:27

JavaScript TypeScript 函數(shù)

2020-12-04 06:27:04

序列化面試官Java

2021-08-02 17:21:08

設(shè)計(jì)模式訂閱
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产亚洲精品久| 日本天堂一区| 亚洲精品福利视频网站| 国产精品一区=区| 成人性生交大片免费看无遮挡aⅴ| 欧美aa在线观看| 91丝袜美腿高跟国产极品老师| 日韩欧美在线精品| 亚洲精品乱码久久久久久日本蜜臀| 91精品久久久久久久久久久久久 | 欧美激情aⅴ一区二区三区| 欧美va在线播放| 欧美aⅴ在线观看| 色就是色亚洲色图| 久久精品国产在热久久| 不卡毛片在线看| 中文字幕 亚洲一区| 少妇一区视频| 亚洲精品成人a在线观看| 久久精品一二三区| 99久久久国产精品无码免费| 韩国精品一区二区三区| 尤物yw午夜国产精品视频| 欧美激情第四页| 成人片免费看| 亚洲精品高清视频在线观看| 欧洲一区二区在线观看| 91在线观看喷潮| 亚洲视频大全| 超碰精品一区二区三区乱码| 中文乱码人妻一区二区三区视频| 国产精品久久乐| 五月婷婷激情综合网| 天堂av免费看| 国产露出视频在线观看| 成人一级片在线观看| 国产精品对白刺激| 黄色一级片免费看| 51精产品一区一区三区| 亚洲视频777| 久久久福利影院| 一区二区三区电影大全| 亚洲一二三四区| 中文字幕一区二区三区精彩视频| 超碰在线播放97| 久久丁香综合五月国产三级网站| 青草成人免费视频| 日本熟妇成熟毛茸茸| 91成人观看| 在线精品国产成人综合| 波多野结衣一本| 综合中文字幕| 欧美日韩一区二区三区视频| av免费播放网址| 2020国产在线| 国产欧美日韩精品在线| 久久精品国产第一区二区三区最新章节 | 国产日韩欧美视频在线| 国产小视频在线免费观看| 欧美精品日韩| 久久伊人91精品综合网站| 国产传媒国产传媒| 极品美女一区二区三区| 亚洲人成电影在线播放| 午夜影院福利社| 9l亚洲国产成人精品一区二三 | 国产午夜精品久久| 欧美日韩最好看的视频| 国产传媒国产传媒| 国精产品一区一区三区四川| 亚洲一级在线观看| 国产精品专区h在线观看| 在线黄色免费观看| 国产欧美一区二区三区精品酒店| 欧美午夜美女看片| 国产无套内射久久久国产| 国产高清第一页| 亚洲欧美网站| 国产精品久久久久久五月尺| 亚洲 欧美 中文字幕| 天天躁日日躁狠狠躁欧美| 91精品国产一区二区三区| 欧美激情伊人电影| 免费日韩在线视频| 色999久久久精品人人澡69 | 天天射,天天干| a级影片在线观看| 国产高清亚洲| 极品av少妇一区二区| 国产亚洲成av人在线观看导航| 亚洲bbw性色大片| 日本高清在线观看| 亚洲日本丝袜连裤袜办公室| 日韩一二区视频| 欧美办公室脚交xxxx| 精品视频在线免费看| 欧美老女人bb| 国内精品久久久久久久久电影网 | 日韩在线一区二区| 18成人免费观看网站下载| 青春草在线观看| 亚洲欧美日韩系列| 欧美 日韩精品| 国产精品高清一区二区| 精品亚洲男同gayvideo网站| 色撸撸在线视频| 亚洲伦伦在线| 91免费看片网站| 国产综合视频一区二区三区免费| 一区二区三区不卡视频在线观看| 日本va中文字幕| 电影一区二区在线观看| 日韩视频第一页| 国产一级淫片a视频免费观看| 另类调教123区| 久久亚洲综合网| 波多野结衣在线播放| 欧美日本在线播放| 免费看黄色的视频| 亚洲国产专区校园欧美| 成人啪啪免费看| 国产区在线视频| 欧美性xxxxx| 一级黄色电影片| 亚洲自拍偷拍网| 国产一区私人高清影院| av电影在线观看| 日韩欧美在线看| 丰满大乳奶做爰ⅹxx视频| 黑人一区二区三区四区五区| 成人福利网站在线观看11| 国产中文字幕在线观看| 婷婷中文字幕一区三区| 性感美女一区二区三区| 一区二区不卡| 成人综合网网址| 久久精品视频免费看| 日韩中文字幕综合| 欧美国产激情一区二区三区蜜月| www.日本在线播放| 97久久超碰| 久久久久久国产| 亚洲黄色在线播放| 一区二区三区资源| 中文字幕永久免费| 在线日韩欧美| 国产综合欧美在线看| av资源网在线播放| 亚洲国产精品va在看黑人| 久久综合激情网| 成人免费毛片片v| 日本欧美视频在线观看| 91精品短视频| 91国在线精品国内播放| 日韩福利一区二区| 色网综合在线观看| 超薄肉色丝袜一二三| 毛片av中文字幕一区二区| 中文一区一区三区免费| 99久久99九九99九九九| 欧美人与性动交a欧美精品| 好男人在线视频www| 婷婷一区二区三区| 亚洲区自拍偷拍| 日日摸夜夜添夜夜添精品视频| 日本一区不卡| 成人综合日日夜夜| 欧美国产欧美亚洲国产日韩mv天天看完整 | av电影在线网| 日韩一区和二区| 五月婷婷一区二区| 91亚洲精华国产精华精华液| aⅴ在线免费观看| 久久视频精品| 春色成人在线视频| 亚洲天堂av影院| 色哟哟入口国产精品| 亚洲va欧美va| 日本精品视频一区二区三区| 久久国产高清视频| 成人午夜又粗又硬又大| 国产免费视频传媒| k8久久久一区二区三区| 91久久精品一区| 午夜影院免费在线| 亚洲精品乱码久久久久久金桔影视 | 97xxxxx| 在线成人激情| 欧美动漫一区二区| 日韩综合av| 97精品一区二区视频在线观看| 国内av一区二区三区| 日韩一区二区在线观看| 一级免费在线观看| 国产精品视频免费看| 少妇伦子伦精品无吗| 日韩在线一二三区| a级黄色片免费| 国产一区二区三区四区五区传媒| 5g国产欧美日韩视频| 欧美日韩精品免费观看视欧美高清免费大片 | 3d动漫精品啪啪一区二区三区免费| 国产经典三级在线| 深夜福利亚洲导航| 日韩a在线观看| 日韩三级视频中文字幕| 免费又黄又爽又猛大片午夜| 伊人婷婷欧美激情| 日韩一区二区三区四区视频| 波多野洁衣一区| 久久精品久久99| 老牛嫩草一区二区三区日本| 国产资源第一页| 精品久久久久久久久久久下田| 成人av男人的天堂| 激情亚洲小说| 国产精品99蜜臀久久不卡二区| 久久不射影院| 久久久极品av| 二区三区在线| 亚洲欧美另类人妖| 天天干视频在线观看| 日韩视频在线你懂得| 亚洲天天综合网| 日韩欧美一区视频| 天天操天天操天天操天天| 一区二区三区在线播| 97在线观看免费高| 中文字幕第一区第二区| 国产真实乱人偷精品人妻| 不卡的电视剧免费网站有什么| 污污的视频免费观看| 免费高清视频精品| 国产激情在线观看视频| 国产手机视频一区二区| 欧美三级蜜桃2在线观看| 久久午夜无码鲁丝片午夜精品| 国产精品嫩草久久久久| 色欲av无码一区二区三区| 成人午夜视频福利| 亚洲丝袜在线观看| 国产一区二区在线看| www.久久久久久久久久久| 六月丁香综合在线视频| 污片在线免费看| 日韩一区精品视频| 韩国日本美国免费毛片| 日韩成人伦理电影在线观看| 玩弄japan白嫩少妇hd| 亚洲一区一卡| 成人在线激情网| 日韩高清欧美激情| 色综合手机在线| 日韩av午夜在线观看| wwwwxxxx日韩| 免费亚洲电影在线| 色播五月综合网| 激情国产一区二区| 色偷偷中文字幕| 国产成人免费视频精品含羞草妖精| www.亚洲自拍| 成人一级视频在线观看| 黄色污在线观看| 国产网站一区二区| 精品亚洲乱码一区二区| 亚洲欧美综合在线精品| 日本中文字幕免费在线观看| 一区二区三区在线观看视频| 日韩av女优在线观看| 欧美午夜久久久| 亚洲天堂网视频| 日韩精品一区二| 神马久久久久| 中文字幕亚洲在线| 在线观看中文字幕的网站| 性色av一区二区三区红粉影视| 亚洲优女在线| 国产美女扒开尿口久久久| 国产精品亚洲欧美日韩一区在线 | 国内外成人免费激情在线视频 | 成人精品久久av网站| 一区二区亚洲视频| 欧美日本韩国国产| 国产精品精品国产一区二区| av网站大全免费| 久久久夜夜夜| 一级 黄 色 片一| ww亚洲ww在线观看国产| 娇小11一12╳yⅹ╳毛片| 亚洲成精国产精品女| 亚洲av综合一区| 日韩精品中午字幕| 黄色在线视频观看网站| 欧美成人小视频| 电影久久久久久| 高清视频一区| 欧美在线电影| 每日在线观看av| 久久99精品久久久久久动态图| av漫画在线观看| 国产精品毛片高清在线完整版| 精品一区在线视频| 精品视频1区2区3区| 人妻无码一区二区三区久久99| 尤物tv国产一区| 国产激情视频在线看| 成人黄色在线免费| 亚洲免费专区| 国产成人永久免费视频| 美女一区二区视频| 最近日韩中文字幕中文| 免费在线一级片| 在线亚洲+欧美+日本专区| 性欧美8khd高清极品| 在线精品国产欧美| 亚洲少妇视频| 成人免费在线看片| 91精品国产视频| 深夜黄色小视频| 久久亚区不卡日本| 日本免费一二三区| 欧美一级午夜免费电影| 伊人免费在线| 国产91在线播放九色快色| 91欧美日韩在线| 永久免费在线看片视频| 久久精品国产久精国产| 一级片视频免费看| 精品久久久中文| 丰满人妻一区二区三区免费视频| 色偷偷9999www| 国产精品4hu.www| 欧美人与物videos另类| 一区二区三区高清视频在线观看| 国产无套精品一区二区三区| **性色生活片久久毛片| 中文字幕精品在线观看| 亚洲天堂免费观看| 国产精欧美一区二区三区蓝颜男同| 国语精品免费视频| 亚洲国产影院| 搡老熟女老女人一区二区| 亚洲成人免费视| 亚洲性猛交xxxx乱大交| 成人午夜视频免费看| 好吊日在线视频| 欧美日韩性生活| gogogo高清在线观看免费完整版| 97香蕉超级碰碰久久免费的优势| 91亚洲无吗| 黄色一级片在线看| 大桥未久av一区二区三区中文| 久久久久久久久毛片| 日韩美一区二区三区| caoporn免费在线视频| 97中文在线观看| 欧美女激情福利| 蜜臀aⅴ国产精品久久久国产老师| 亚洲综合精品自拍| 人人妻人人澡人人爽久久av| 性欧美xxxx交| 欧美一级全黄| 日韩一级片播放| 国产精品久99| 国产伦精品一区二区三区免.费| 操91在线视频| 欧美aaaaa级| 能在线观看的av| 国产精品亲子伦对白| av中文在线观看| 91精品国产91久久久久久| 久久不见久久见国语| 午夜免费看视频| 有坂深雪av一区二区精品| 亚洲欧美丝袜中文综合| 国产精品久久久999| 久久久蜜桃一区二区人| zjzjzjzjzj亚洲女人| 亚洲成a人片在线观看中文| 免费观看国产精品| 日本精品视频在线观看| 欧美一级精品片在线看| 91女神在线观看| 一区二区在线观看av| 五月婷婷六月色| 国产精品久久久久久久9999| 精品孕妇一区二区三区| 91久久嫩草影院一区二区| 精品电影一区| www.av欧美| 欧美一级二级三级蜜桃| zzzwww在线看片免费| 无码免费一区二区三区免费播放| 国产精品一区免费视频| 国产网址在线观看| 最新国产成人av网站网址麻豆| 狼人精品一区二区三区在线 | 亚洲国产日韩一区无码精品久久久| 欧美日韩免费观看一区二区三区| 成人性生交大片免费看在线播放|