请帮我实现一个观察者模式
时间: 2024-01-21 17:19:20 浏览: 15
好的,以下是观察者模式的简单实现:
```python
class Subject:
"""
主题类,包含一个观察者列表和一个状态变量
"""
def __init__(self):
self._observers = []
self._state = None
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)
def set_state(self, state):
"""
设置状态变量
"""
self._state = state
self.notify()
def get_state(self):
"""
获取状态变量
"""
return self._state
class Observer:
"""
观察者类,包含一个更新方法
"""
def update(self, subject):
pass
class ConcreteObserver(Observer):
"""
具体观察者类,实现更新方法
"""
def update(self, subject):
print(f"状态变为:{subject.get_state()}")
if __name__ == '__main__':
subject = Subject()
observer = ConcreteObserver()
subject.attach(observer)
subject.set_state("状态1")
subject.set_state("状态2")
subject.detach(observer)
subject.set_state("状态3")
```
这里实现了一个主题类 `Subject` 和一个观察者类 `Observer`,并且有一个具体的观察者类 `ConcreteObserver`。主题类包含一个观察者列表和一个状态变量,观察者类包含一个更新方法。具体的观察者类实现了更新方法,即在状态变化时输出变化信息。