Python 程序语言设计模式思路-行为型模式:观察者模式:定义对象之间的一对多依赖关系及利用观察者模式实现日志系统和股票价格观察

Python 行为型模式:观察者模式:定义对象之间的一对多依赖关系

公众号:人生只不过是一场投资

引言

在软件开发中,设计模式是一套被反复使用、经过分类和总结的代码设计经验。被广泛用于解决常见的问题。在 Python 脚本设计中,创建对象的方式多种多样,设计模式提供了多种有效的解决方案。观察者模式(Observer Pattern)是一种行为型设计模式,旨在定义对象之间的一对多依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。观察者模式特别适用于事件驱动的系统,通过松耦合的方式实现对象之间的通信。本文将探讨Python中的观察者模式,介绍其应用领域,提供代码实例及详解,并分析其优缺点,最终得出结论。

应用领域

观察者模式在以下几种场景中有广泛的应用:

  1. 事件处理系统:在图形用户界面(GUI)和实时系统中,观察者模式常用于事件处理机制,监听用户的操作并作出相应的反应。
  2. 数据变化通知:在数据模型与视图分离的架构中,当数据发生变化时,通过观察者模式通知视图更新显示。
  3. 消息广播系统:在发布-订阅(Publish-Subscribe)系统中,观察者模式用于实现消息的广播和接收。
  4. 日志系统:在需要记录系统行为的日志系统中,观察者模式可以实时通知日志记录器记录相关信息。

示例一

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ょ镜花う水月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值