• 微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊
  • 关注后发送关键资料,免费获取一整套前端系统学习资料和老男孩python系列课程
    js--设计模式--观察者模式_发布订阅


​学习资源推荐​

简介


该模式被广泛应用,符合发布订阅,一对n的模式。对于任意的主题,都有任意个的观察者,当主题发生改变,会通知所有的观察者,并执行其update方法获取最新的主题状态


code

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},状态值:${this.subject.getState()}`)
}
}


var s=new Subject();

var o1=new Observer('o1',s);
var o2=new Observer('o2',s);
var o3=new Observer('o3',s);


s.setState(1)
s.setState(2)
s.setState(3)

应用

node 自定义事件

var events = require('events');
var emitter=new events.EventEmitter();

emitter.on('say',(msg)=>{
console.log(msg)
})
emitter.on('say',(msg)=>{
console.log(msg+' tom')
})

emitter.emit('say','hello')

文件读取

var fs=require('fs')

var readStream=fs.createReadStream('./index.js');

var result=0;
readStream.on('data',(chunk)=>{
result+=chunk.toString().length
})
readStream.on('end',()=>{
console.log(result)
})

其他


  • node 原生post请求
  • vue,react生命周期