發布訂閱模式和觀察者模式是兩種設計模式,在 vue 中有各自的應用場景。兩種模式的本質是相同的,但是還是有區別的,經常被混為一談。
我們假定,存在乙個"訊號中心",某個任務執行完畢,就向訊號中心"發布"(publish)乙個訊號,其他任務可以向訊號中心"訂閱"(subscribe)這個訊號,從開知道什麼時候自己可以執行。這就叫做**「發布/訂閱模式」(publish-subscribe pattern)**\
let vm =
newvue()
// 訂閱1
vm.$on
('datachange',(
)=>
)// 訂閱2
vm.$on
('datachange',(
)=>
)// 發布
vm.$emit
('datachange'
)
在上述的 vue 的自定義事件中,訂閱1 和 訂閱2 都訂閱了同乙個訊號 「datachange」 ,當通過 vm.$emit(『datachange』) 發布這個訊號的時候,訂閱者們就會接收到訊號開始執行各自的操作。這不過這裡面的所有的訂閱者和發布者都是乙個角色 vm 。
// eventbus.js
// 事件中心
let eventhub =
newvue()
// componenta.vue
// 發布者
addtodo:
function()
)this
.newtodotext =''}
// componentb.vue
// 訂閱者
created:
function()
>
// 事件觸發器
class
eventemitter
this
.subs = object.
create
(null
)// 使用 object.create() 的方法建立乙個物件可以傳遞乙個引數,這個引數的作用是去設定建立的物件的原型,設定為 null 宣告這個物件沒有原型屬性,可以提高效能。以為這裡的物件只需要儲存鍵值對的形式,所以不需要原型。
}// 註冊事件
$on(eventtype, handler)
// 觸發事件
$emit
(eventtype))}
}}// 測試
let em =
neweventemitter()
em.$on(
'click',(
)=>
) em.
$on(
'click',(
)=>
) em.
$emit
('click'
)script
>
設計模式學習(二) 發布 訂閱模式
發布 訂閱模式又叫觀察者模式,它定義物件間的一對多的依賴關係,當乙個物件的狀態發生變化時,所有訂閱它的物件都將得到通知 實現發布 訂閱模式有以下幾步 event.js let event param key param fn subscribe function key,fn this.client...
10 發布訂閱模型
icestorm 是乙個高效的用於ice應用的發布 訂閱服務,icestorm有幾個比較重要的概念 訊息 icestorm的訊息和普通的訊息佇列中介軟體中描述的訊息有點區別,icestorm 的訊息是強型別的,由對某個slice 操作的呼叫 代表 操作名 標識 訊息的型別,操作引數 定義 訊息內容。...
17 發布與訂閱
redis的發布與訂閱功能由publish subscribe psubscribe等命令組成。通過執行subscribe命令,客戶端可以訂閱乙個或多個頻道,從而成為這些頻道的訂閱者 subscriber 每當有其他客戶端向被訂閱的頻道傳送訊息 message 時,頻道的所有訂閱者都會收到這個訊息。...