用观察者模式实现猫大叫老鼠淘宝,主人被惊醒并画出类图
时间: 2024-02-19 21:02:02 浏览: 83
好的,下面是实现猫大叫老鼠淘宝的类图和代码。
类图如下:
![观察者模式类图](https://img-blog.csdnimg.cn/2021070809542093.png)
代码实现如下:
```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 Cat(Subject):
# 猫叫
def yell(self):
print("猫大叫!")
self.notify()
# 抽象观察者类
class Observer:
# 更新方法
def update(self):
pass
# 具体观察者类(老鼠类)
class Mouse(Observer):
def __init__(self, name):
self.name = name
# 更新方法
def update(self):
print("老鼠{}听到猫叫,赶紧逃跑!".format(self.name))
# 具体观察者类(主人类)
class Owner(Observer):
def __init__(self, name):
self.name = name
# 更新方法
def update(self):
print("主人{}听到猫叫,被惊醒了!".format(self.name))
# 测试代码
if __name__ == '__main__':
# 创建猫、老鼠和主人对象
cat = Cat()
mouse1 = Mouse("Tom")
mouse2 = Mouse("Jerry")
owner = Owner("Jack")
# 添加观察者
cat.attach(mouse1)
cat.attach(mouse2)
cat.attach(owner)
# 猫叫,观察者做出相应的行动
cat.yell()
```
运行上述代码,输出结果如下:
```
猫大叫!
老鼠Tom听到猫叫,赶紧逃跑!
老鼠Jerry听到猫叫,赶紧逃跑!
主人Jack听到猫叫,被惊醒了!
```
可以看到,观察者模式成功实现了猫大叫老鼠淘宝的场景,而且代码结构更加清晰,扩展性更好。
阅读全文