观察者模式
最近考试有考过几次,便仔细瞧瞧了这是何物。
我理解其中核心的点就在于,当一个观察者观察到发生了改变,不仅他自身要进行更新,其余所有的观察者都将被通知到并进行更新。
代码实现如下:
from abc import ABCMeta, abstractmethod class Subject(object): def __init__(self): self.observers = [] self._state = "" @property def state(self): return self._state @state.setter def state(self, value): self._state = value self.notify_all() def add_observers(self, observer): self.observers.append(observer) def notify_all(self): for observer in self.observers: observer.update(self.state) class Observer(metaclass=ABCMeta): def __init__(self, subject): subject.add_observers(self) @abstractmethod def update(self, state): """all observers must implement this function to become a observer""" class RainObserver(Observer): def __init__(self, subject): super().__init__(subject) def update(self, state): print(self.__class__.__name__, "had updated! now state: ", state) class SunObserver(Observer): def __init__(self, subject): super().__init__(subject) def update(self, state): print(self.__class__.__name__, "had updated! now state: ", state) if __name__ == '__main__': tmp_subject = Subject() RainObserver(tmp_subject) SunObserver(tmp_subject) tmp_subject.state = "Rain"
输出:
RainObserver had updated! now state: Rain
SunObserver had updated! now state: Rain
进一寸有进一寸的欢喜。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构