各位同仁,各位技术爱好者,大家好! 今天,我们将深入探讨一个在软件设计领域无处不在、却又常常被忽视的经典模式——观察者模式。想象一下这样的场景:您有一个核心数据,它承载着重要的业务状态。当这个数据发生变化时,系统中的多个部分——我们姑且称之为“嗷嗷待哺”的组件——都需要立即得知并做出响应。它们可能是用户界面元素,需要更新显示;可能是日志记录器,需要记录下状态变更;也可能是其他业务逻辑,需要根据新状态触发进一步的处理。 如果每个组件都直接去轮询这个变量,或者变量每次变化时都手动调用所有相关组件的方法,那将是一场灾难。代码会变得高度耦合,难以维护,更别说扩展了。当新组件加入或旧组件退出时,您将不得不修改核心变量的代码。这违背了软件设计的基本原则:开放-封闭原则(Open-Closed Principle),即对扩展开放,对修改封闭。 那么,有没有一种优雅的方式,让这个核心变量在“悄然无息”地改变自身的同时,又能“振臂一呼”,让所有关注它的组件都能及时得到通知,而又不必知道它们具体是谁,有多少个,甚至它们会做什么?答案是肯定的,这就是我们今天要讲的——观察者模式。 问题的提出与观察者模式的引 …
`观察者`模式:利用`Python`的`WeakSet`解决`观察者`模式中的`内存`泄漏问题。
利用 WeakSet 解决 观察者 模式中的内存泄漏问题 大家好,今天我们来聊聊观察者模式,以及如何在 Python 中使用 WeakSet 来解决观察者模式中常见的内存泄漏问题。 观察者模式简介 观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生改变时,所有依赖它的观察者对象都会收到通知并自动更新。 简单来说,就是有一个主题 (Subject) 维护着一个观察者 (Observer) 列表,主题的状态改变会通知所有观察者。 主要角色: 主题 (Subject): 维护观察者列表,提供添加、删除观察者的方法,并在状态改变时通知观察者。 观察者 (Observer): 定义一个更新接口,当接收到主题的通知时,执行更新操作。 具体主题 (ConcreteSubject): 主题的具体实现,维护自身状态,并在状态改变时通知观察者。 具体观察者 (ConcreteObserver): 观察者的具体实现,实现更新接口,响应主题的通知。 优点: 解耦: 主题和观察者之间是松耦合的,主题不需要知道观察者的具体实现。 扩展性: 可 …
C++ 观察者模式:在多线程环境中实现事件通知
好的,各位观众老爷们,大家好!今天咱就来聊聊C++里那个有点意思的“观察者模式”,而且得是在“多线程”这个热闹的舞台上玩。这俩词儿一凑一块儿,就有点像在嘈杂的菜市场里试图用广播通知大家“猪肉降价了!”——既要保证消息传到,又不能把市场搞得更乱。 啥是观察者模式?(别跟我说你不知道!) 简单来说,观察者模式就像订阅报纸。你(观察者)订阅了《头条日报》(主题),一旦《头条日报》有新内容(事件发生),它就会自动把消息推送给你。你不用天天打电话问编辑“今天有啥新闻没?”。 用更技术的话说: 主题(Subject): 维护一个观察者列表,当状态发生变化时,通知所有观察者。 观察者(Observer): 定义一个更新接口,用于接收主题的通知。 具体主题(Concrete Subject): 继承主题,实现状态变化时通知观察者的逻辑。 具体观察者(Concrete Observer): 继承观察者,实现接收到通知后的处理逻辑。 C++代码来一波!(别光说不练!) 先来个简单的单线程版本,让大家热热身: #include <iostream> #include <vector> …