理解Python观察者模式的定义和概念

2023-04-04 00:00:00 定义 理解 观察者

观察者模式是一种行为设计模式,它允许多个对象(称为观察者)同时监听一个主题对象,并在主题对象状态发生变化时接收通知。观察者模式中,主题对象(也称为被观察者)是一个重要的组成部分,它维护一份观察者列表,并提供了添加、删除和通知观察者的方法。观察者模式的目的是解耦观察者和被观察者之间的关系,从而使得它们可以独立地变化而不影响彼此。

在 Python 中,实现观察者模式通常需要定义两个类:Subject 和 Observer。Subject 类维护观察者列表和当前状态,并提供添加、删除和通知观察者的方法;Observer 类定义观察者的行为。

以下是一个简单的示例,用 Python 实现观察者模式:

class Subject:
    def __init__(self):
        self.observers = []
        self.state = ""

    def attach(self, observer):
        self.observers.append(observer)

    def detach(self, observer):
        self.observers.remove(observer)

    def notify(self):
        for observer in self.observers:
            observer.update(self.state)

    def set_state(self, state):
        self.state = state
        self.notify()


class Observer:
    def update(self, state):
        pass


class ConcreteObserver(Observer):
    def __init__(self, name):
        self.name = name

    def update(self, state):
        print(f"{self.name} received new state: {state}")


subject = Subject()
observer1 = ConcreteObserver("pidancode.com")
observer2 = ConcreteObserver("皮蛋编程")

subject.attach(observer1)
subject.attach(observer2)

subject.set_state("new state")

subject.detach(observer2)

subject.set_state("another new state")

在这个示例中,Subject 类维护了一个观察者列表和当前状态,提供了 attach、detach 和 notify 方法用于添加、删除和通知观察者。Observer 类定义了观察者的行为,其中 update 方法被 ConcreteObserver 类重写,用于在观察到被观察者状态变化时执行的操作。在示例的末尾,我们创建了一个主题对象 subject 和两个观察者 observer1 和 observer2,并将 observer1 和 observer2 添加到 subject 的观察者列表中。随后,我们调用 subject 的 set_state 方法,将其状态设置为 "new state",然后通知所有观察者。观察者 observer1 和 observer2 都收到了通知,输出相应的信息。接着,我们从 subject 中删除了 observer2,并再次调用 set_state 方法,将其状态设置为 "another new state",然后通知所有观察者。此时,只有 observer1 收到了通知。

相关文章