帮我写一个观察者模式案例
时间: 2024-05-02 13:22:24 浏览: 11
好的,以下是一个简单的观察者模式案例:
观察者模式是一种行为设计模式,其中一个对象(主题)维护其依赖项(观察者列表),并在其状态更改时自动通知它们。在该模式中,主题是可观察的,而观察者是依赖主题的对象。
现在,我们将创建两个类:Subject(主题)和 Observer(观察者)。Subject维护一个观察者列表,并提供了添加和删除观察者的方法。Observer定义了一个更新方法,当主题更改时被调用。
代码如下:
```python
class Subject:
def __init__(self):
self.__observers = []
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()
class Observer:
def update(self):
pass
```
现在,我们可以创建具体的主题和观察者类,并进行相应的操作。
```python
# 创建具体的主题类
class ConcreteSubject(Subject):
def __init__(self):
super().__init__()
self.__state = None
def get_state(self):
return self.__state
def set_state(self, state):
self.__state = state
self.notify()
# 创建具体的观察者类
class ConcreteObserver(Observer):
def __init__(self, name):
self.__name = name
def update(self):
print(f'{self.__name} 观察到状态已经改变!')
# 创建主题和观察者实例,并进行相应的操作
subject = ConcreteSubject()
observer1 = ConcreteObserver('观察者1')
observer2 = ConcreteObserver('观察者2')
# 添加观察者到主题
subject.attach(observer1)
subject.attach(observer2)
# 改变主题状态,从而触发观察者的更新
subject.set_state(1)
# 从主题中删除一个观察者
subject.detach(observer2)
# 再次改变主题状态,触发另一个观察者的更新
subject.set_state(2)
```
以上就是一个简单的观察者模式实现,希望能对您有所帮助。