摘要:發布訂閱模式觀察者模式發布訂閱模式也叫觀察者模式,這是一個一對多的關系,可以多個訂閱者訂閱同一個事件,當事件觸發時就會通知訂閱者去執行訂閱時綁定的程序我舉個例子來解釋一下同學想在結婚的時候邀請好友來喝喜酒,這個邀請的名單其實就是訂閱事件
發布-訂閱模式/觀察者模式
發布-訂閱模式也叫觀察者模式,這是一個一對多的關系,可以多個訂閱者訂閱同一個事件,當事件觸發時就會通知訂閱者去執行訂閱時綁定的程序;
我舉個例子來解釋一下:
A同學想在結婚的時候邀請好友B、C、D、E、F、G...來喝喜酒,這個邀請的名單其實就是訂閱事件
class Person extends EventEmitter{ constructor(){ super(); } } let A= new Person(); function drinkFn(){ console.log( `xxxx年xx月xx日來xx大酒店和我的喜酒!`) } A.on("結婚",drinkFn);
等到A同學要結婚的時候,他就會去通知他的好友XXX時間XX酒店過來喝酒,這個過程就是發布事件
A.emit("結婚");
以下是我的實現過程:
class EventEmitter { constructor(){ this._count=null; } //訂閱事件 on(type,callBack,flag){ //創建_events對象 if(!this._events){ this._events=Object.create(null); } // 判斷_events對象是否有type屬性 if(this._events[type]){ if(flag){ this._events[type].unshift(callBack) }else{ this._events[type].push(callBack) } }else{ this._events[type]=[callBack] } //type如果不是newListener類型,則執行newListener對應的函數 if(type!=="newListener"){ this._events["newListener"]&&this._events["newListener"].forEach(fn=>{ fn(type,callBack); }) } // 超出最大綁定事件限制提示 if(this._events[type].length>=this.getMaxListeners()){ console.log("超出最大綁定事件限制") } } //訂閱一次性事件 once(type,callBack,flag){ function warp(...argments){ callBack(...argments); this.removeListener(type,callBack) } warp.cb=callBack; this.on(type,warp,flag); } //發布事件 emit(type,...args){ if(this._events[type]){ this._events[type].forEach(fn => { fn.call(this,...args) }); } } // 獲取當前type事件的數組對象 listeners(type){ return this._events[type]||[]; } // 訂閱事件并在第一時間觸發 prependListener(type,callBack){ this.on(type,callBack,true); } // 訂閱一次性事件并在第一時間觸發 prependOnceListener(type,callBack){ this.once(type,callBack,true); } // 獲取當前實例所有的事件類型 eventNames(){ return Object.keys(this._events) } // 獲取當前type事件類型的長度 listenerCount(type){ if(this._events[type]){ return this._events[type].length }else{ return 0 } } // 移除type事件所有的執行函數 removeListener(type,callBack){ if(this._events[type]){ this._events[type]=this._events[type].filter(fn=>{ return callBack!=fn&&fn.cb!=callBack }) } } // 移除實例上所有的事件 removeAllListeners(){ this._events=Object.create(null) } // 獲取當前實例的最大事件綁定限制 getMaxListeners(){ return this._count ? this._count :EventEmitter.defaultMaxListeners; } // 設置當前實例的最大事件綁定限制 setMaxListeners(n){ this._count=n; } } // 設置默認的最大事件綁定限制 EventEmitter.defaultMaxListeners=10; module.exports=EventEmitter;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94370.html
摘要:期設計模式如何理解觀察者發布訂閱模式定義觀察者模式又叫發布訂閱模式,它定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生變化時就會通知所有的觀察者對象,使得它們能夠自動更新自己生活實例理解你今天去看一個 20190411期 設計模式-如何理解觀察者(發布訂閱)模式? 定義: 觀察者模式又叫發布訂閱模式(Publish/Subscribe),它定義了一...
摘要:概念觀察者模式被廣泛地應用于客戶端編程中。所有的瀏覽器事件,等都是使用觀察者模式的例子。在觀察者模式中,一個對象訂閱另一個對象的指定活動并得到通知,而不是調用另一個對象的方法。此外,觀察者模式還可用于實現數據綁定。 概念 觀察者模式被廣泛地應用于JavaScript客戶端編程中。所有的瀏覽器事件(mouseover,keypress等)都是使用觀察者模式的例子。這種模式的另一個名字叫自...
摘要:觀察者模式簡介觀察者模式又稱發布訂閱模式,是一種最常用的設計模式之一了。其實瀏覽器的事件也是觀察者模式這里訂閱了的事件,當我們的鼠標點擊操作,事件發布,對應的就會執行。包括在內的,只要是支持事件響應的核心模塊都是的子類。 觀察者模式 簡介 觀察者模式又稱發布訂閱模式,是一種最常用的設計模式之一了。講道理,如果我們寫的不是稍微底層的代碼,可能不會用到它。 但是有了它會讓代碼更靈活,更加規...
摘要:觀察者模式介紹觀察者模式又稱發布訂閱模式,它定義對象間的一種一對多的依賴關系,當一個對象發生改變的時候,所依賴它的對象都能得到通知。關于內部的觀察者模式可以參數這篇文檔。總結總之,觀察者模式在中的使用是非常廣泛的。 javascript觀察者模式 介紹 觀察者模式又稱發布-訂閱模式,它定義對象間的一種一對多的依賴關系,當一個對象發生改變的時候,所依賴它的對象都能得到通知。例如:我們訂閱...
摘要:我們在平時的工作中,總是會遇到老舊的系統以及老舊陳的代碼。弊端就是需要維護兩套代碼,理解兩套技術選型。那么問題就來了新的代碼如何和舊的代碼解耦新代碼我們當然是用新倉庫,新選擇,新打包工具。。。 我們在平時的工作中,總是會遇到老舊的系統以及老舊陳的代碼。他們是業務長年累月的積累,以及因為是三、四年前的技術選型造成的系統架構的不合理以及繁瑣的代碼。維護這些代碼總是很頭疼,程序員遇到這樣的代...
閱讀 2470·2023-04-25 21:41
閱讀 1647·2021-09-22 15:17
閱讀 1921·2021-09-22 10:02
閱讀 2433·2021-09-10 11:21
閱讀 2569·2019-08-30 15:53
閱讀 996·2019-08-30 15:44
閱讀 946·2019-08-30 13:46
閱讀 1125·2019-08-29 18:36