观察者模式(1)

观察者模式是什么

观察者模式(Observer),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

也可以叫发布-订阅模式(Publish/Subscribe)但是注意不尽然,这两个还是有一定区别的

两者最大的区别在于发布定于模式,多了个调度中心;
观察者模式中观察者和目标直接进行交互,而发布订阅模式中统一由调度中心进行处理,订阅者和发布者互不干扰,可以进行更多细致化的操作控制。
image

实现

  1. 观察者模式 分为目标主体和多个观察者(一对多的关系)
  2. 目标主体 内有主要是收集观察者和 发送通知
  3. 观察者 每次创建时 往目标主体里面添加,和等待消息通知

----上代码-----

//目标主体
class Sub{
constructor(){
this.obList=[] //收集器
}
addOb(obSever){ //添加观察者
this.obList.push(obSever)
}
// 通知每个观察者 并携带信息
notify(dataInfo){
this.obList.forEach(observer =>{
observer.upData(dataInfo)
})
}
}
//观察者
class obServer{
constructor(name){
this.name=name
}
upData(data){
console.log(`观察者${this.name}接收到${data}`);
}
}
let sub= new Sub()
let ob1=new obServer('张三')
let ob2=new obServer('李四')
sub.addOb(ob1) //添加观察者
sub.addOb(ob2) //添加观察者
sub.notify('看见了日全食') //发布消息实现群体通知

image

上面简单实现一个观察者模式 在目标主体实现对象的解耦,不用在手动去调用观察者的接收更新;
下篇给大家带来 观察者模式 的一些简单示例应用

posted @   xiao旭  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2021-07-12 vue-cli3.0 性能优化 及入坑记录
点击右上角即可分享
微信分享提示