当一个对象改变时,则通知依赖它的对象。
优点:
观察者与被观察者是抽象耦合的
缺点:
太多观察者会导致,通知所有的观察者花费很多时间。
Demo
"""观察者模式"""from abc import ABCMeta, abstractmethodclass Subject:def __init__(self):self.observers = []self.state = Nonedef set_state(self, state):self.state = stateself.notify_observers()def notify_observers(self):for observer in self.observers:observer.update()def add_observer(self, observer):self.observers.append(observer)class Observer(metaclass=ABCMeta):@abstractmethoddef update(self):passclass AObserver(Observer):def update(self):print(f"[{self.__class__}] update")class BObserver(Observer):def update(self):print(f"[{self.__class__}] update")class CObserver(Observer):def update(self):print(f"[{self.__class__}] update")if __name__ == '__main__':s = Subject()s.add_observer(AObserver())s.add_observer(BObserver())s.add_observer(CObserver())s.set_state("ccc")s.set_state("bbbb")
