跳转至

""" 观察者模式 行为模式

设计时设计成可以取消订阅 当发布者状态改变时 所有依赖他的订阅者都得到通知并被自动更新 观察者模式又称 发布-订阅 模式

""" from abc import ABCMeta, abstractmethod

抽象 观察者 订阅者

class Observer(metaclass=ABCMeta): @abstractmethod def update(self, notice): # notice 是 Notice 的一个对象 # 发布者状态发生改变时 更新 pass

抽象 发布者 主题 订阅关系不能写死

class Notice: def init(self): self.observers = [] # 存储所有订阅者

def attach(self, obs):
    # 订阅
    self.observers.append(obs)

def detach(self, obs):
    # 取消订阅
    self.observers.remove(obs)

def notify(self):
    # 发布
    for obs in self.observers:
        obs.update(self)

具体发布者 主题

class StaffNotice(Notice): def init(self, company_info=None): super().init() self.__company__info = company_info

@property
def company_info(self):
    return self.__company__info

@company_info.setter
def company_info(self, info):
    self.__company__info = info
    self.notify()

具体 观察者 订阅者

class Staff(Observer): def init(self): self.company_info = None

def update(self, notice):
    self.company_info = notice.company_info

notice = StaffNotice('初始公司信息') s1 = Staff() s2 = Staff() notice.attach(s1) notice.attach(s2) notice.company_info = 'HiHiHi' print(s1.company_info)