公众号:人生只不过是一场投资
引言
在软件开发中,设计模式是一套被反复使用、经过分类和总结的代码设计经验。被广泛用于解决常见的问题。在 Python 脚本设计中,创建对象的方式多种多样,设计模式提供了多种有效的解决方案。观察者模式(Observer Pattern)是一种行为型设计模式,旨在定义对象之间的一对多依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。观察者模式特别适用于事件驱动的系统,通过松耦合的方式实现对象之间的通信。本文将探讨Python中的观察者模式,介绍其应用领域,提供代码实例及详解,并分析其优缺点,最终得出结论。
应用领域
观察者模式在以下几种场景中有广泛的应用:
- 事件处理系统:在图形用户界面(GUI)和实时系统中,观察者模式常用于事件处理机制,监听用户的操作并作出相应的反应。
- 数据变化通知:在数据模型与视图分离的架构中,当数据发生变化时,通过观察者模式通知视图更新显示。
- 消息广播系统:在发布-订阅(Publish-Subscribe)系统中,观察者模式用于实现消息的广播和接收。
- 日志系统:在需要记录系统行为的日志系统中,观察者模式可以实时通知日志记录器记录相关信息。
示例一
from abc import ABC, abstractmethod
from typing import List
# 抽象主题类
class Subject(ABC):
"""
主题接口,定义了添加、删除观察者以及通知观察者的方法
"""
def __init__(self):
self._observers: List[Observer] = [] # 存储观察者对象的列表
def attach(self, observer: 'Observer') -> None:
"""
添加观察者
"""
self._observers.append(observer)
def detach(self, observer: 'Observer') -> None:
"""
删除观察者
"""
self._observers.remove(observer)
def notify(self) -> None:
"""
通知所有观察者
"""
for observer in self._observers:
observer.update(self)
# 抽象观察者类
class Observer(ABC):
"""
观察者接口,定义了更新方法
"""
@abstractmethod
def update(self, subject: Subject) -> None:
"""
接收来自主题的通知,并进行相应的处理
"""
pass
# 具体主题类
class Data(Subject):
"""
具体主题类,存储数据并管理观察者
"""
def __init__(self, value: int):
super().__init__()
self._value = value
@property
def value(self) -> int:
return self._value
@value.setter
def