# 行为型模式-观察者模式
from abc import ABCMeta, abstractmethod
class IObserver(metaclass=ABCMeta):
@abstractmethod
def update(self, temperature):
pass
class Baidu(IObserver):
temperature = 0
def update(self, temperature):
print("百度天气更新:%s --> %s" % (self.temperature, temperature))
self.temperature = temperature
class Weixin(IObserver):
temperature = 0
def update(self, temperature):
print("微信天气更新:%s --> %s" % (self.temperature, temperature))
self.temperature = temperature
class Subject(metaclass=ABCMeta):
@abstractmethod
def register(self, observer):
""""""
pass
@abstractmethod
def remove(self, observer):
pass
@abstractmethod
def notify(self):
pass
class Weather(Subject):
temperature = 0
_observer_list = []
def register(self, observer: IObserver):
self._observer_list.append(observer)
def remove(self, observer: IObserver):
self._observer_list.remove(observer)
def notify(self):
for item in self._observer_list:
item.update(self.temperature)
def data_change(self, temperature):
self.temperature = temperature
self.notify()
if __name__ == "__main__":
weather = Weather()
weather.register(Weixin())
weather.register(Baidu())
weather.data_change(1)
weather.data_change(2)
![]()