共计 675 个字符,预计需要花费 2 分钟才能阅读完成。
发布订阅模式
发布订阅模式直接没有关联,可以不发布只订阅 也可以只订阅不发布
例:
const event = {_arr: [],
on(fn) {this._arr.push(fn)
},
emit() {
this._arr.forEach(fn => {fn()
})
}
}
event.on(() => {console.log('数据来了')
})
const obj = {}
event.on(() => {if(Object.keys(obj).length == 2) {console.log(obj)
}
})
obj.name = 'test'
event.emit()
obj.age = 12
event.emit()
观察者模式
(基于发布订阅的,而且观察者模式发布订阅之间是有关联的)
class Subject {constructor () {
this.state = '开心'
this.observers = []}
attach (o) {this.observers.push(o)
}
setState (newState) {
this.state = newState
this.observers.forEach(o => {o.update(this)
})
}
}
class Observer {update (sub) {console.log('被观察着的状态是:' + sub.state)
}
}
const mama = new Observer()
const baba = new Observer()
const baby = new Subject()
baby.attach(mama)
baby.attach(baba)
baby.setState('不开心')
正文完
发表至: javascript
2020-06-27