日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

怎樣用JavaScript實現(xiàn)觀察者模式

瀏覽:29日期:2023-10-02 09:39:16
概述

觀察者模式又被稱為發(fā)布-訂閱模式,是設(shè)計模式中的一種行為型模式;

定義:

觀察者模式定義了一種一對多的對象依賴關(guān)系,當(dāng)被依賴的對象的狀態(tài)發(fā)生了改變,所有依賴它的對象都會得到通知;

白話解釋:

假如你去蘋果專賣店買最新款的iphone11,因為iphone11剛出來不久,正處旺季,供貨不足;當(dāng)你去專賣店的時候,店員告訴你暫時沒貨了,但是你可以留下你的聯(lián)系方式,如果貨到了,會第一時間通知;當(dāng)然你肯定不會每天都去專賣店問iphone11到貨沒有,也不會天天給專賣店打電話,因為你有你自己的工作和生活,不可能有那么多閑暇時間;所以此時,店員讓你留下聯(lián)系方式,到貨了第一時間通知你,不會給你帶來麻煩,而你只需要等著專賣店的電話即可;而這種方法就是一種典型的觀察者模式;

首先我們還是來分析一下:

1.訂閱方法:我們把聯(lián)系方式給專賣店店員是屬于一種消息訂閱的消息,因為只有這樣你才能及時的知道iphone11到貨了,所有我們需要一個訂閱行為的具體方法;

2.預(yù)訂列表:要知道iphone11是屬于新版iphone,所以肯定不會是只有你一個人去預(yù)訂,所以店員為了方便統(tǒng)計還需要一個預(yù)訂列表來統(tǒng)計所有的預(yù)訂者的聯(lián)系方式以及預(yù)訂手機版本信息,所以我們這里先給它定義為一個對象;key代表是預(yù)訂者的聯(lián)系方式,value代表預(yù)訂手機版本信息;

3.發(fā)布方法:當(dāng)iphone11到貨的時候,專賣店肯定要根據(jù)預(yù)訂列表來進行統(tǒng)一發(fā)布消息('iphone11到貨了,大家快來搶?。。?),所以專賣店需要一個發(fā)布方法來實行具體的發(fā)布行為;、

4.取消訂閱:萬物相對,能訂閱肯定就能取消訂閱;在等待iphone11到貨通知的時候,你急著用手機,所以直接買了華為的某款,所以iphone11暫時對你來說需求不大,因為你已經(jīng)有了手機所以專賣店的iphone11是否到貨對你來說沒有任何意義了;所以此時你不想被打擾,需要取消訂閱消息;所以我們需要一個取消訂閱方法來實現(xiàn)具體的取消訂閱的行為;

觀察者模式的應(yīng)用場景

1、DOM事件

如果你是一個前端開發(fā)人員,不管你讀這篇文章之前是否已經(jīng)了解觀察者模式,但是我能肯定你已經(jīng)用過觀察者模式;

document.body.addEventListener(’click’, function() { console.log(’hello world!’);});

這段代碼看著眼熟嗎?是的,這是一個DOM事件的監(jiān)聽;我們通過給body訂閱click事件(click相當(dāng)于上面的訂閱方法),因為瀏覽器并不知道你什么時候點擊鼠標(biāo),所以等你觸發(fā)click事件的時候才會觸發(fā)函數(shù)給你發(fā)布通知(發(fā)布方法);DOM事件就是一個觀察者模式的實現(xiàn);

2、vue雙向綁定v-model

我們作為前端開發(fā)人員,肯定知道vue是一個MVVM模式的框架;vue的核心就是雙向綁定,那么雙向綁定的實現(xiàn)實際上就是一種觀察者模式;因為你首先綁定了一個數(shù)據(jù)之后(訂閱方法),瀏覽器并不知道你什么時候修改,你頁面上所有綁定了該數(shù)據(jù)或者依賴該數(shù)據(jù)的節(jié)點其實就是一個預(yù)訂列表,只有等你修改了該數(shù)據(jù)的值的時候,vue才會通知(發(fā)布方法)到依賴該數(shù)據(jù)的方法/數(shù)據(jù)進行相應(yīng)的操作或刷新;

當(dāng)然觀察者模式絕不僅限于這倆種實現(xiàn)場景,在我們的生活中、業(yè)務(wù)場景中有很多觀察者模式的示例,之前我們第一篇工廠模式介紹設(shè)計模式的時候就說過了,設(shè)計模式是一種解決問題的思路而非一種固定的公式,那么我們怎么實現(xiàn)觀察者模式呢?

觀察者模式的實現(xiàn)

//定義商家var merchants = {};//定義預(yù)訂列表merchants.orderList = {};//將增加的預(yù)定者添加到預(yù)訂列表中 (訂閱方法)merchants.listen = function(id,info){ //如果存在 if(!this.orderList[id]){// (預(yù)訂列表)this.orderList[id] = []; } // 將用戶的預(yù)定的產(chǎn)品信息存入到數(shù)組中 this.orderList[id].push(info);}//發(fā)布信息(發(fā)布方法)merchants.publish = function(){ var id = Array.prototype.shift.call(arguments); var infos = this.orderList[id]; if(!infos || infos.length === 0){console.log('您還沒有預(yù)定信息');return false; } for(var i = 0;i < infos.length;i++){console.log('預(yù)定成功');console.log('尊敬的用戶:')infos[i].apply(this,arguments);console.log('到貨了'); }}//取消訂閱 merchants.remove = function(id,fn){ var infos = this.orderList[id]; if(!infos){ return false} if(!fn){console.log(123); }else{for(var i = 0;i < infos.length;i++){ if(infos[i] === fn){infos.splice(i,1); }} }}let customeA = function(){ console.log('黑色尊享版一臺');}merchants.listen('15172103336',customeA);merchants.remove('15172103336',customeA);merchants.publish('15172103336');

上面的代碼稍微有點長,不過沒有很難;首先我們是定義了一個對象是作為商家,然后定義了一個空的對象作為預(yù)訂列表,再一步步的實現(xiàn)我們的訂閱方法和發(fā)布以及取消訂閱的方法;邏輯不復(fù)雜,但是有一些語法需要講解一下:

發(fā)布方法中的var id = Array.prototype.shift.call(arguments);這句的意思是將merchants.publish('15172103336');方法調(diào)用的時候第一個參數(shù)返回給它然后復(fù)制為id,所以其實此時的id值為”15172103336“;

infos[i].apply(this,arguments);這個方法也不是特別好理解,首先infos里裝的是預(yù)訂者的手機號碼以及手機版本信息,所以我們infos[i].apply(this,arguments);這個方法其實就是將'15172103336'對應(yīng)的手機版本信息函數(shù)進行調(diào)用了一遍;實際上等于infos[i](arguments);

總結(jié)

觀察者模式不管是在前端領(lǐng)域還是在現(xiàn)實生活中的應(yīng)用都是有很常見的場景,學(xué)好觀察者模式有利用我們學(xué)習(xí)vue的源碼知識,當(dāng)然不僅限于此,所以觀察者模式值得我們好好學(xué)習(xí),一句話:'你品,你細品!' 今天付出的努力,在日后總會換成工資來回報你的!

以上就是怎樣用JavaScript實現(xiàn)觀察者模式的詳細內(nèi)容,更多關(guān)于JavaScript觀察者模式的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩综合一区二区三区| 国产欧美一区二区精品久久久 | 欧洲精品一区二区三区| 国内精品亚洲| 精品高清久久| 综合日韩av| 国产精品片aa在线观看| 国产精品成人自拍| 美女久久久精品| 国产一区二区三区亚洲| 亚洲播播91| 影音先锋久久| 日韩一区欧美二区| 男人的天堂久久精品| 日本va欧美va瓶| 国产毛片精品| 老色鬼精品视频在线观看播放| 精品三级在线| 欧美69视频| 日本欧美在线看| 亚洲精品国产精品粉嫩| 男人的天堂亚洲一区| 国产亚洲观看| 岛国av免费在线观看| 久久男女视频| 男女男精品网站| 国产情侣一区在线| 三级在线看中文字幕完整版| 精品一区欧美| 日本午夜免费一区二区| 欧美成人一二区| 午夜久久中文| 亚洲一区网站| 国产精品一区二区中文字幕| 97精品国产| 九九综合在线| 蜜臀国产一区二区三区在线播放| 奇米亚洲欧美| 欧美不卡高清一区二区三区| 久久aⅴ国产紧身牛仔裤| 日本a级不卡| www在线观看黄色| 亚洲欧美不卡| 久久一区视频| 一本色道精品久久一区二区三区| 日韩和欧美的一区| 中文字幕高清在线播放| 视频在线在亚洲| 精品资源在线| 国产手机视频一区二区| 免费日韩一区二区三区| 精精国产xxxx视频在线播放| 亚洲在线久久| 成年男女免费视频网站不卡| 一区二区自拍| 欧美激情亚洲| 久久都是精品| 色乱码一区二区三区网站| 久久精品二区三区| 综合亚洲色图| 日韩在线精品| 国产精品一区二区三区四区在线观看| 亚洲不卡av不卡一区二区| 欧美日韩一区二区高清| 9国产精品视频| 精品国内亚洲2022精品成人 | 精品精品99| 亚洲精品综合| 99精品美女| 久久99免费视频| 伊人久久大香线蕉av超碰演员| 国产亚洲字幕| 亚洲精品极品少妇16p| 国产精品4hu.www| 日韩视频一区| 日韩国产激情| 欧美一级网址| 免费精品视频| 久久天堂成人| 麻豆精品视频在线观看视频| 欧美精品一区二区三区精品| 麻豆国产欧美一区二区三区| 蜜臀精品久久久久久蜜臀 | 中文视频一区| 亚洲天堂久久| 黄色aa久久| 国产精品美女午夜爽爽| 欧美中文字幕| 久久精品99久久无色码中文字幕| 久久精品九色| 欧美日韩伊人| 日韩午夜视频在线| 99精品美女| 波多野结衣久久精品| 欧美黄页在线免费观看| 91久久精品无嫩草影院| 综合日韩在线| 男人的天堂久久精品| 午夜国产欧美理论在线播放 | 国产精品入口久久| 日本电影久久久| 日韩中文字幕91| 99视频一区| 欧美成人国产| 激情视频网站在线播放色| 欧美精品二区| 国产精品午夜av| 日韩中文字幕无砖| 中文字幕一区二区三区日韩精品 | 播放一区二区| 国产aⅴ精品一区二区三区久久| 国产日韩欧美中文在线| 日韩成人一级| 人人爱人人干婷婷丁香亚洲| 热久久免费视频| 免费在线观看精品| 日韩专区欧美专区| 视频在线观看91| 亚洲高清影视| 久久99伊人| 中文字幕日韩亚洲| 亚洲2区在线| 日韩国产91| 欧美性www| 国产精品一区二区三区美女| 国产精品毛片aⅴ一区二区三区| 国产精品综合色区在线观看| 欧美精品国产白浆久久久久| 国产欧美亚洲一区| 久久99精品久久久野外观看| 国产一区二区三区四区二区| 国产成人精品一区二区三区免费 | 国产成人精品一区二区三区免费 | 亚洲黄色在线| 国产亚洲一区在线| 噜噜噜躁狠狠躁狠狠精品视频| 免费看精品久久片| 日本不卡视频在线| 国产欧美三级| 精品视频在线你懂得| 成人在线视频免费看| 在线亚洲人成| 最新亚洲激情| 日韩精品福利一区二区三区| 欧美在线不卡| 国产一区二区三区天码| 久久久精品日韩| 视频一区中文字幕国产| 日韩欧美激情电影| 国产精品地址| 成人啊v在线| 亚洲一区区二区| 欧美日韩一区二区三区四区在线观看 | 日本伊人久久| 麻豆久久一区二区| 免费高潮视频95在线观看网站| 色天使综合视频| 婷婷综合网站| 日韩一区二区三免费高清在线观看| 国产精品二区影院| 国产激情在线播放| 尹人成人综合网| 欧美日韩一区二区三区四区在线观看 | 女同性一区二区三区人了人一| 亚洲精品人人| 精品久久久亚洲| 尤物精品在线| 国产激情精品一区二区三区| 久久国产亚洲| 亚洲精品一二| 日本一区二区高清不卡| 一区在线免费| 亚洲精品亚洲人成在线观看| 国产va免费精品观看精品视频| 国产精品毛片在线看| 国产三级精品三级在线观看国产| 免费在线欧美黄色| 黄色亚洲精品| 欧美aa在线视频| 亚洲作爱视频| 久久免费影院| 亚洲欧美久久久| 麻豆久久一区| 国产亚洲精品久久久久婷婷瑜伽| 日韩精品免费视频一区二区三区| 精品视频网站| 亚洲精品系列| 国产精品黑丝在线播放| 亚洲欧美日本国产专区一区| 久久99视频| 视频一区中文字幕国产| 国产精品99一区二区三| 免费人成在线不卡| 免费看av不卡| 国产精品一区亚洲| 久久国产成人| 日韩成人三级| 国产精品资源| 日韩午夜一区| 久久电影tv|