釋出訂閱模式的定義:<code>它定義對象間的一種一對多的依賴關系,當一個對象的狀态發生改變時,所有依賴于它的對象都将得到通知</code>。
釋出訂閱模式在JS中最常見的就是DOM的事件綁定與觸發:
這兩句代碼就是該模式的核心:注冊了點選事件,在某個特定時刻(這裡是按鈕點選)執行注冊的事件。
在vue裡的事件注冊也是用的該模式,這裡是vue裡綁定事件的模仿:
就本質來看,該模式在JS裡的實作仍然是依靠JS的動态語言特性:能随意随時在對象中添加屬性,方法;函數也是對象能被傳遞的特點。
在政策模式中的最後個例子裡我用了一個包裝類來收集每個元素運用的政策方法,這裡與釋出訂閱模式很像當仍然有根本上的差別:
政策模式不提供政策的增删,而觀察者模式則提供了監聽的真假與移除;
政策模式需要知道政策方法接收的參數隻能通過檢視政策類,而觀察者模式的監聽方法是使用者自定義的;
其實就政策模式最基本的實作上是不需要一個收集政策的類的,從這方面看它和觀察者模式的相似點就隻有“都有一個儲存函數的緩存,在某個時候會被執行”。