观察者模式实现交通信号灯,南北绿灯通行,东西红灯等待
时间: 2023-06-29 10:11:23 浏览: 51
观察者模式是一种行为型设计模式,它允许对象之间建立一对多的依赖关系,当一个对象状态改变,它的所有依赖者都会收到通知。根据这个特点,我们可以利用观察者模式来实现交通信号灯的控制。
首先,我们需要定义两个类:交通信号灯类和观察者类。交通信号灯类包含交通信号灯的状态(红灯、绿灯等),以及注册删除观察者的方法。观察者类包含一个更新方法,用于交通信号灯状态改变时接收通知。
```python
# 通信号灯类
class TrafficLight:
def __init__(self):
self.observers = []
self.current_state 'red'
def register(self, observer):
self.observers.append(observer)
def unregister(self observer):
self.observers.remove(observer)
def set_state(self, state):
self.current_state = state
self.notify()
def notify(self):
for observer in self.observers:
observer.update(self.current_state)
# 观察者类
class Observer:
def update(self, state):
pass
```
接下来,我们创建两个具体的观察者类,分别表示南北方向和东西方向的车辆。这两个观察者类实现了观察者类的更新方法,当交通信号灯状态为绿灯时,它们会收到通知并执行相应的操作(通行或等待)。
```python
# 观察者类:南北方向的车辆
class NorthSouthObserver(Observer):
def update(self, state):
if state == 'green':
print('南北方向车辆通行')
else:
print('南北方向车辆停止等待')
# 观察者类:东西方向的车辆
class EastWestObserver(Observer):
def update(self, state):
if state == 'green':
print('东西方向车辆停止等待')
else:
print('东西方向车辆通行')
```
最后,我们创建一个交通信号灯对象,并将两个观察者对象注册到该对象中。然后,我们调用交通信号灯对象的set_state方法来改变信号灯状态,从而触发观察者对象的更新方法。
```python
# 测试代码
if __name__ == '__main__':
traffic_light = TrafficLight()
north_south_observer = NorthSouthObserver()
east_west_observer = EastWestObserver()
traffic_light.register(north_south_observer)
traffic_light.register(east_west_observer)
traffic_light.set_state('green')
```
当交通信号灯状态为绿灯时,输出结果为:
```
南北方向车辆通行
东西方向车辆停止等待
```
当交通信号灯状态为红灯时,输出结果为:
```
南北方向车辆停止等待
东西方向车辆通行
```
可以看到,观察者模式实现了交通信号灯的控制,南北方向和东西方向的车辆根据信号灯的状态执行相应的操作。