设计模式系列之--观察者模式-画图讲解

观察者模式已经是比较常见的设计模式了,并且使用的频率也比较高,

那么我们什么时候用,简而言之就是,当我们一个主体改变,它所有下级要跟着改变的时候就需要用了,比如:换肤,全局数据修改,有点类似于全局状态机,只不过它可以监听改变的过程。

下面以一张图简单了解下:

下面代码讲解下:

首先创建一个被观察者

javascript 复制代码
  constructor(){
    this.observerList = []
  }
  addObserver(observer){
    this.observerList.push(observer)
  }
  removeObserver(observer){
    const index = this.observerList.findIndex((item)=>item.name === observer.name)
    this.observerList.splice(index,1)
  }
  notifyObservers(message){
    const observers = this.observerList
    observers.forEach(item => {
      item.notified(message)
    });
  }
}

创建观察者

javascript 复制代码
class Observer{
  constructor(name,Subject){
    this.name = name
    if(Subject){
      Subject.addObserver(this)
    }
  }
  notified(message){
    console.log(this.name,message )
  }
}

配合使用

javascript 复制代码
const subject = new Subject()
const observer = new Observer('观察者1号',subject) // 加入观察者
const observer2 = new Observer('观察者2号')
subject.addObserver(observer2)// 加入观察者
subject.notifyObservers('起飞了')`

实现结果

有帮助到你点个赞吧!

相关推荐
是糖糖啊5 小时前
Google Stitch 用 AI 将想法秒变高保真 UI,并一键导出 Figma / 代码
设计模式·产品经理·产品
Yu_Lijing9 小时前
基于C++的《Head First设计模式》笔记——访问者模式
c++·笔记·设计模式
workflower9 小时前
未来图景对制造系统提出全面理解、
设计模式·集成测试·软件工程·软件构建·制造·结对编程
程序员小寒11 小时前
JavaScript设计模式(七):迭代器模式实现与应用
前端·javascript·设计模式·迭代器模式
hnlgzb13 小时前
MVC和MVVM设计模式中对应的是什么组件?有什么对应关系?
设计模式·mvc
tobias.b1 天前
软件设计模式:核心术语·名词解释·关联对比
设计模式
hnlgzb1 天前
目前编写安卓app的话有哪几种设计模式?
android·设计模式·kotlin·android jetpack·compose
pedestrian_h1 天前
Java单例模式回顾
java·单例模式·设计模式
饼干哥哥1 天前
这10个n8n工作流,直接干死了90%的Tiktok视频生产,一键直出100条
设计模式
砍光二叉树1 天前
【设计模式】行为型-命令模式
设计模式·命令模式