Python设计模式之观察者模式原理与用法详解

叶初
叶初
发布时间:2026-10-13| 4人浏览过
原创

本文详解Python中的观察者模式(发布-订阅模式),通过定义一对多关系实现主题状态变化时自动通知观察者。文章提供Boss与下属互动的完整代码示例,解析如何解除类间紧密耦合,并推荐相关Python数据结构与算法教程供深入学习。

本文通过具体实例深入解析Python设计模式中的观察者模式,阐述其核心原理与实际应用方法,旨在为读者提供清晰的参考与学习素材。

观察者模式,亦称发布-订阅模式(Publish Subscribe Pattern),核心在于定义一种一对多的依赖关系。它允许多个观察对象同时监听一个主题对象,一旦主题对象的状态发生任何变化,便会立即通知所有注册的观察者,促使它们自动执行相应的更新操作。

以下展示一个基于Python实现的观察者模式基础Demo,用于演示其基本工作机制。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——观察者模式
观察者模式又叫做发布-订阅模式 (Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更新自己
使用场景:当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象待改变
"""
#抽象通知者类
class Subject(object):
  def attach(self, observer):
    pass
  def detach(self,observer):
    pass
  def notify(self):
    pass
#具体通知者类
class Boss(Subject):
  def __init__(self):
    self.observer_list = []
    self.subject_status = ''
  def attach(self, observer):
    self.observer_list.append(observer)
  def detach(self,observer):
    self.observer_list.remove(observer)
  def notify(self):
    for item in self.observer_list:
      item.update()
#抽象观察者类
class Observer(object):
  def __init__(self, name, publish):
    self.name = name
    self.publish = publish
  def update(self):
    pass
#具体观察者类-看股票的人
class StockObserver(Observer):
  def update(self):
    print self.publish.subject_status,self.name,'关闭股票行情,继续工作'
#具体观察者类-看NBA的人
class NbaObserver(Observer):
  def update(self):
    print self.publish.subject_status,self.name,'关闭NBA,继续工作'
if __name__ == "__main__":
  publisher = Boss()
  stocker = StockObserver('Andy',publisher)
  nbaer = NbaObserver('Tracy',publisher)
  publisher.attach(stocker)
  publisher.attach(nbaer)
  publisher.subject_status = '本老板回来了'
  publisher.notify()

程序执行后的输出结果如下:

本老板回来了 Andy 关闭股票行情,继续工作 本老板回来了 Tracy 关闭NBA,继续工作

上述代码中涉及的类结构关系,可通过下图直观展示:

在系统设计中,若将系统分割为一系列相互协作的类,往往会产生一个显著的副作用:必须维护这些对象之间的一致性。我们应当避免为了保持这种一致性而使各个类之间产生紧密耦合,因为这种紧密耦合会给后续的代码维护、功能扩展以及代码重用带来极大的不便。

观察者模式的核心价值在于解除对象间的耦合关系。它遵循依赖倒置原则,让耦合的双方都依赖于抽象接口而非具体实现。这种设计使得任何一方发生独立变化时,都不会影响到另一方的运行,从而实现了松耦合的系统架构。

如需进一步掌握Python编程技巧,建议查阅本站专题资源,包括《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》以及《Python入门与进阶经典教程》。

希望本文关于Python程序设计模式的阐述,能对广大读者的学习与实践提供切实帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。