观察者模式 又叫发布-订阅模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。当这个主题对象的状态发生变化时通知所有的观察者对象,让他们自动更新自己的状态。
俗话说,“蚂蚁搬家蛇过道,明日必有大雨到”。现在我们反过来,大雨将要来历的时候,蚂蚁开始搬家,蛇出来遛弯。
定义一个基类,Animal
class Animal:
def update(self):
self.do_something(self)
def do_something(self):
pass
蚂蚁类和蛇类分别去继承Animall类和实现方法
class Ant(Animal):
def do_something(self):
print("蚂蚁开始搬家")
class Snake(Animal):
def do_something(self):
print("蛇出洞遛弯")
雨类
class Rain:
observer_list = []
state = 1
def register_observer(self, animal):
# 注册观察者
self.observer_list.append(animal)
def notify_all_observers(self):
# 通知所有观察者更新自己的状态
for observer in self.observer_list:
observer.update(observer)
def do_something(self):
# state 为0 表示要下雨了,为1表示晴天
if self.state == 0:
print("马上要下大雨了")
self.notify_all_observers()
else:
print("晴天")
测试代码
rain = Rain()
# 注册观察者Ant
rain.register_observer(Ant)
# 注册观察者Snake
rain.register_observer(Snake)
rain.do_something()
rain.state = 0
rain.do_something()