行为型模式-观察者模式

# 行为型模式-观察者模式


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)

  

 

posted @ 2023-06-28 17:54  你看起来真的很好吃  阅读(1)  评论(0编辑  收藏  举报