Vue你是会了~那你说说观察者模式和发布订阅模式的区别?

1340次阅读  |  发布于2年以前

前言

大家好, 用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。

发布订阅模式 & 观察者模式

大家在学习Vue的时候肯定会听说过这两个设计模式,但是又没有一个很清晰的区别的认识,前几天看到一篇文章讲的挺好,接下来分享给大家

原文链接:https://www.kancloud.cn/cyyspring/vuejs/2083506

发布订阅模式

1.vue中自定义事件就是利用了'发布订阅模式'

// 订阅中心 
const vm = new Vue({})
// 注册事件
vm.$on('dataChage', (msg) => {
    console.log(msg) // 测试数据
})
// 触发事件
vm.$emit('dataChage', '测试数据')
2.下面案例把调用信号中心注册事件的叫'订阅者',使用信号中心触发事件叫'发布者'
// eventBus.js
// 事件中心
let eventHub = new Vue()

// ComponentA.vue
// 发布者
addTodu: function () {
 // 发布消息(事件) 触发事件
 eventHub.$emit('add-todo', { text: this.newTodoText })
 this.newTodoText = ''
}

// ComponentB.vue
// 订阅者
created: function () {
 // 注册事件
 eventHub.$on('add-todo', this.addTodo)
}

观察者模式

// 发布者
class Dep {
    constructor() {
        this.subs = []
    }
    // 记录观察者
    addSub(sub) {
        if (sub && sub.update) {
            this.subs.push(sub)
        }
    }
    // 发布通知
    notify() {
        this.subs.forEach(sub => {
            sub.update()
        })
    }
}

// 观察者具备updata 方法
// 订阅者-观察者
class Watcher {
    update() {
        console.log('update')
    }
}

// 测试
let dep = new Dep()
let watcher = new Watcher()

dep.addSub(watcher)

dep.notify()

二者区别

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8