【Python3】观察者模式

观察者模式(Observer Pattern)是一种常见的设计模式,用于定义对象之间的一对多依赖关系,使得一个对象的状态改变能够通知所有依赖于它的对象并自动更新。

在观察者模式中,有两个核心角色:

  1. Subject(主题):也称为被观察者,它维护一组观察者对象,并提供添加、删除和通知观察者的方法。当主题状态发生变化时,会通知所有注册的观察者。

  2. Observer(观察者):观察主题的对象,当主题状态发生变化时,观察者会接收到更新通知,并进行相应的处理操作。

观察者模式的优点包括:

  • 解耦性:主题和观察者之间是松耦合的关系,主题无需知道观察者的具体实现,只需通知观察者即可。
  • 可扩展性:可以方便地增加新的观察者或主题,而不影响已有代码。
  • 通知机制:观察者模式提供了一种简单且可靠的通知机制,确保观察者能及时获得主题状态的变化。

在实际应用中,观察者模式被广泛应用于GUI编程、事件处理机制、发布订阅系统等场景,其中对象间的状态变化需要被动态通知其他对象。

class Subject:
    def __init__(self):
        self._observers = []

    def attach(self, observer):
        if observer not in self._observers:
            self._observers.append(observer)

    def detach(self, observer):
        try:
            self._observers.remove(observer)
        except ValueError:
            pass

    def notify(self, message):
        for observer in self._observers:
            observer.update(message)


class Observer:
    def update(self, message):
        print("Received message:", message)


# 创建主题和观察者对象
subject = Subject()
observer1 = Observer()
observer2 = Observer()

# 将观察者对象注册到主题
subject.attach(observer1)
subject.attach(observer2)

# 发送通知
subject.notify("Hello, observers!")

# 分离观察者对象
subject.detach(observer2)

# 再次发送通知
subject.notify("Another message")

在上面的示例中,我们首先定义了 Subject 类和 Observer 类。Subject 类维护了一组观察者对象,并提供了注册、注销和通知观察者的方法。Observer 类定义了观察者对象,其中包含了更新方法 update

然后,我们创建了一个主题对象和两个观察者对象,并将观察者对象注册到主题。随后,我们通过主题对象发送通知,并观察观察者对象的响应。

相关推荐

  1. Python3观察模式

    2024-03-16 01:08:03       23 阅读
  2. Python实现观察模式

    2024-03-16 01:08:03       34 阅读
  3. python编程之观察模式

    2024-03-16 01:08:03       32 阅读
  4. 观察模式 Observer

    2024-03-16 01:08:03       43 阅读
  5. 观察模式学习

    2024-03-16 01:08:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 01:08:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 01:08:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 01:08:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 01:08:03       20 阅读

热门阅读

  1. css页面布局

    2024-03-16 01:08:03       21 阅读
  2. DNS 技巧与窍门

    2024-03-16 01:08:03       19 阅读
  3. Kubernetes部署与卸载

    2024-03-16 01:08:03       20 阅读
  4. msql检索包含中文的记录

    2024-03-16 01:08:03       22 阅读
  5. C++中的引用

    2024-03-16 01:08:03       19 阅读
  6. element ui el-select组件添加选项下拉加载

    2024-03-16 01:08:03       18 阅读
  7. 蓝桥杯刷题(七)

    2024-03-16 01:08:03       18 阅读
  8. Spring-1

    Spring-1

    2024-03-16 01:08:03      19 阅读
  9. 2024年3月质量管理体系基础考试真题

    2024-03-16 01:08:03       21 阅读
  10. 【C++】每日一题 101 对称二叉树

    2024-03-16 01:08:03       22 阅读
  11. 【数组】-Lc53-最大子序和(动态规划)

    2024-03-16 01:08:03       21 阅读
  12. 人工智能迷惑行为大赏

    2024-03-16 01:08:03       17 阅读