四、观察者模式
观察者模式又可称为发布-订阅(Publish/Subscribe)模式(还有其他很多名称)。其定义一种一对多的依赖关系:一个主题对象可被多个观察者对象同时监听,是的每当主题对象状态变化时,所有依赖他的对象都会得到通知并被自动更新。
实际生活中很多类似的应用场景。比如练习英语口语时,可能需要经常听一些BBC或者ABC的broadcast:对于BBC或者ABC而言,听众有或没有它都会在那里播放;对于听众而言,如果想听BBC或者ABC就打开它们固定的收听频率即可。听众根据接收内容的变化,自主选择是否继续收听。
类比观察者模式:BBC/ABC就是Publish information,而听众就是Subscribe to BBC/ABC English。BBC/ABC 的节目列表更新就会通知notice,听众根据这个notice自主选择是否继续收听就是自动更新的过程。
具体用UML图表示如下:
observer subscribe to subject :
subject publish information to observer:
个人理解整个观察者模式的重点就在于通知:作为依赖对象其自动更新的依据就是通知,而作为主题对象的被依赖对象其要依据某种规则(这个规则应该是依赖对象认可的)判断状态是否有变化发出通知。这个认知对于判断依赖与被依赖关系很重要,例如下列案例:
需求:学生在某论坛上提出问题并指定某老师解答。该指定老师会收到关于解答该问题的邮件。确定观察者模式中的依赖与被依赖对象。
分析:首先找到通知,在根据通知判断Subject和Observer。根据需求老师接收到邮件那么就是老师接收到通知,可以判断老师就是该论坛上的一个Oberserver,该论坛就是一个Subject。
在实际生产中,如何发出和接收通知的具体细节可能会根据具体的业务场景选择合适的方式。Zookeeper中的通知机制就是服务器端通知,客户端回调的方式。下图为借用的Zookeeper关于Watch部分的思维导图(个人认为整理的还蛮全面,希望学习使用不涉及侵权O(∩_∩)):
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?