Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 1.09 KB

0304.md

File metadata and controls

52 lines (46 loc) · 1.09 KB

订阅发布模式

// 发布订阅
class Event {
    constructor() {
        this.stack = [] // 存放订阅者
    }
    on(callback) {
        this.stack.push(callback) // on事件中每一个订阅
    }
    emit() {
        this.stack.forEach(item => item()) // emit中遍历数组,执行每一个
    }
}

观察者模式

class Subject {
    constructor() {
        this.state = ' 不开心' // 被观察者的状态
        this.stack = [] // 存放每个观察者
    }
    attack(o) {
        this.stack.push(o) // 添加每个观察者到数组
    }
    setState(state) {
        this.state = state // 改变被观察者的状态
        this.stack.forEach(o => o.update(state)) // 通知每个观察者
    }
}
class Observer {
    constructor(name) {
        this.name = name
    }
    update(value) {
        console.log(`${this.name}更新啦 ${value}`) // 被观察者变化时,触发每个观察者的更新
    }
}

let o1 = new Observer('o1')
let o2 = new Observer('o2')
let s1 = new Subject()
s1.attack(o1)
s1.attack(o2)
s1.setState('开心啊')