觀察者模式又叫發佈訂閱模式,它定義了對象間的一種一對多的依賴關係。觀察者模式讓兩個對象鬆耦合地聯繫在一塊兒,雖然不太清楚彼此的細節,但這不影響他們之間的互相通訊。html
定義一個對象,在對象中實現註冊事件,關閉事件和觸發事件。node
js 簡單實現設計模式
var Observer = { data: {}, // 訂閱 register: function (event, func) { if (this.data[event]) { this.data[event].push(func); } else { this.data[event] = [func]; } }, // 發佈 triggle: function (event) { let evtList = this.data[event]; if (evtList) { for (let i = 0; i < evtList.length; i++) { evtList[i](); } } else { return false; } }, // 退訂 off: function (event, func) { let evtList = this.data[event]; if (evtList) { evtList.forEach(function (item, index, arr) { if (item === func) { arr.splice(index, 1); } }) } else { return false; } if (!evtList.length) { delete this.data[event]; } } }
dom2級的事件處理程序就用了該模式。/ * node.js的不少模塊也運用了該模式。*/dom