观察者模式|观察者模式 - 演示与场景
- 发布&订阅
- 一对多/一对一
UML类图:
文章图片
image.png
// 主题、保存状态,状态变化之后触发所有观察者模式
class Subject{
constructor() {
this.state = 0
this.observers = []
}
getState(){
return this.state
}
setState(state){
this.state = state
this.notifyAllObservers()
}
notifyAllObservers(){
this.observers.forEach(observer => {
observer.update()
})
}
attach(observer){
this.observers.push(observer)
}
}
// 观察者
class Observer {
constructor(name, subject){
this.name = name
this.subject = subject
this.subject.attach(this)
}
update(){
console.log(`${this.name} update, state: ${this.subject.getState()} `)
}
}// 测试
let s = new Subject()
let o1 = new Observer('o1', s)
let o2 = new Observer('o2', s)
let o3 = new Observer('o3', s)s.setState(1)
s.setState(2)
s.setState(3)
使用场景:
网页事件绑定
$('#btn').click(function(){
console.log(1)
})
$('#btn').click(function(){
console.log(2)
})
$('#btn').click(function(){
console.log(3)
})
Promise
三种状态:pending、fulfilled、rejected
jQuery callbacks
// 自定义事件,自定义回调
var callbacks = $.Callbacks()
callbacks.add(function(info){
console.log('fn1', info)
})
callbacks.add(function(info){
console.log('fn2', info)
})
callbacks.add(function(info){
console.log('fn3', info)
})
【观察者模式|观察者模式 - 演示与场景】nodejs自定义事件
推荐阅读
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 设计模式-代理模式-Proxy
- 【译】Rails|【译】Rails 5.0正式发布(Action Cable,API模式等)
- java静态代理模式
- VueX(Vuex|VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
- Kotlin基础(10)-代理模式在kotlin中的使用
- 长谈的确是这个时代需要的一种模式
- 《读_Head_First_有感》_“命令模式”
- 洗洗睡了|洗洗睡了 | 休息的时候,千万注意切换你的行为模式
- 设计模式【15】--从审批流中学习责任链模式