请用python代码说明一下观察者模式
时间: 2023-07-03 17:13:24 浏览: 61
好的,下面是一个简单的观察者模式的示例代码:
```python
# 定义观察者接口
class Observer:
def update(self, message):
pass
# 定义主题类
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 ConcreteObserver(Observer):
def __init__(self, name):
self._name = name
def update(self, message):
print(f"{self._name} receive message: {message}")
# 定义具体主题类
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(state)
# 测试代码
if __name__ == '__main__':
subject = ConcreteSubject()
observer1 = ConcreteObserver("Observer 1")
observer2 = ConcreteObserver("Observer 2")
subject.attach(observer1)
subject.attach(observer2)
subject.set_state("New State")
```
以上代码实现了一个简单的观察者模式,其中`Observer`是观察者接口,`Subject`是主题类,`ConcreteObserver`是具体观察者类,`ConcreteSubject`是具体主题类。观察者通过调用`update()`方法接收主题的变化,主题通过调用`attach()`方法添加观察者,通过调用`detach()`方法移除观察者,通过调用`notify()`方法通知所有观察者。