通用设计模式之观察者模式(发布-订阅者模式)
生活中观察者模式也是非常常见的,比如订阅公众号,订阅报纸,订阅各种媒体等:当被订阅的主体的状态发生改变,比如有新的消息,就通知订阅者。
class Publisher{ _state = 0; subscribers = [] get state(){ return this._state } set state(value){ this._state = value this.notify(value) } notify(value){ this.subscribers.forEach(subscriber => subscriber.update(value)) } collect(subscriber){ this.subscribers.push(subscriber) } } let subId = 1 class Subscriber{ publisher = null; id = subId++; subscribe(publisher){ this.publisher = publisher publisher.collect(this) } update(value){ console.log(`我是${this.id}号订阅者,收到发布者信息:${value}`); } } let publisher = new Publisher() let subscriber1 = new Subscriber() let subscriber2 = new Subscriber() subscriber1.subscribe(publisher) subscriber2.subscribe(publisher) publisher.state = 2
观察者的使用场合就是:当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象需要改变的时候,就应该考虑使用观察者模式。
示例:各种原生事件,自定义事件。vue源码。
前端菜鸟一枚,如有错误之处,烦请指出,与大家共同进步!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理