简单的观察者模式示例分享


当然,下面是一个简单的观察者模式(Observer Pattern)的示例,使用Python语言实现。在这个示例中,我们将创建一个主题(Subject)类和一个观察者(Observer)接口,然后实现几个具体的观察者类。


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

    def register_observer(self, observer):
        """注册观察者"""
        if observer not in self._observers:
            self._observers.append(observer)

    def remove_observer(self, observer):
        """移除观察者"""
        self._observers.remove(observer)

    def notify_observers(self, message):
        """通知所有观察者"""
        for observer in self._observers:
            observer.update(message)

class Observer:
    """观察者接口"""
    def update(self, message):
        pass

class ConcreteObserverA(Observer):
    def update(self, message):
        print(f"Observer A received: {message}")

class ConcreteObserverB(Observer):
    def update(self, message):
        print(f"Observer B received: {message}")

# 使用示例
if __name__ == "__main__":
    subject = Subject()
    observerA = ConcreteObserverA()
    observerB = ConcreteObserverB()

    subject.register_observer(observerA)
    subject.register_observer(observerB)

    subject.notify_observers("Hello, Observers!")

    # 移除一个观察者
    subject.remove_observer(observerA)

    # 再次通知,观察输出
    subject.notify_observers("Hello again, but only Observer B!")

这个示例中,`Subject` 类管理着一组观察者(Observer),这些观察者实现了 `Observer` 接口(在这个例子中,我们使用Python的类继承来模拟接口)。当主题的状态发生变化时(在这个例子中,我们通过 `notify_observers` 方法模拟状态的变化),它会通知所有注册的观察者。每个观察者都会接收到一个消息,并根据这个消息进行更新(在这个例子中,只是简单地打印出来)。

希望这个示例能帮助你理解观察者模式的基本概念和实现方式。