官方定义:定义对象之间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
认识观察者模式:
1、目标与观察者之间的关系:目标与观察者之间是一对多的关系。
2、单向依赖:只有目标知道什么时候通知观察者。
3、命名模式:又称为发布-订阅模式,目标接口定义后面跟subject,观察者接口定义后面跟observer,观察者接口的更新方法建议为update,方法的参数是根据需要定义的。
4、触发通知的时机:先改变后通知。
观察者实现的两种方式:
1、推模型:目标对象主动向观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据。
2、拉模型:目标对象在通知的时候只传递少量信息,如果观察者需要更具体的信息,由观察者主动到目标对象获取,相当于是观察者主动在目标对象中拉数据。
两种模式的比较:
1、推模型是假定目标对象知道观察者所需要的数据,而拉模型是目标对象具体需要什么数据,直接把自生传递给观察者,由观察者来取值,推模型会使观察者对象难以复用;
2、拉模型下,update方法的参数是对象本身,基本可以适应各种情况的需要。
观察者的优点:
1、观察者模式实现了观察者和目标之间的抽象耦合。
2、观察者模式实现了动态联动。
3、观察者模式支持广播通信。
观察者的缺点:
1、可能会引起无畏的操作。
观察者模式衍生:
如果观察者有个性化的设置,则需要在通知的时候区别对待。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY