建设京东商城网站,淄博网站开发,网站想换一个空间怎么办,主机安装wordpress内容#xff1a;定义对象间的一种一对多的依赖关系#xff0c;当一个对象的状态发生改变的时候#xff0c;所有依赖于它的对象得到通知并被自动更新。观者者模式又称为“发布-订阅”模式。比如天气预报#xff0c;气象局分发气象数据。 角色#xff1a; 抽象主题#xf… 内容定义对象间的一种一对多的依赖关系当一个对象的状态发生改变的时候所有依赖于它的对象得到通知并被自动更新。观者者模式又称为“发布-订阅”模式。比如天气预报气象局分发气象数据。 角色 抽象主题Subject具体主题ConcreteSubject——发布者抽象观察者Observer具体观察者ConcreteOserver——订阅者 举个例子 需求公司可以向每个订阅的员工发送消息员工可以选择需不需要订阅
from abc import ABCMeta,abstractmethod# 定义顶层代码
# 抽象订阅者
class Observer(metaclassABCMeta):abstractmethoddef update(self,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 StaffNitice(Notice):def __init__(self,company_infoNone):super().__init__()# 处理成私有对象self.__company_infocompany_info# 类似于getpropertydef company_info(self):return self.__company_info# 类似于setcompany_info.setterdef company_info(self,info):self.__company_infoinfoself.notify()# 推送class Staff(Observer):def __init__(self):self.company_infoNonedef update(self, notice):self.company_infonotice.company_infonoticeStaffNitice(初始公司信息)
s1Staff()
s2Staff()
notice.attach(s1)
notice.attach(s2)
notice.company_info公司今年业绩很好给大家发奖金print(s1.company_info)
print(s2.company_info)notice.detach(s1)notice.company_info公司明天放假print(s1.company_info)
print(s2.company_info)
适用场景; 当一个抽象模型有两个方面其中一个依赖于另外一个方面。将这两者封装在独立对对象中以使他们可以各自独立地改变和复用。当一个对象的改变需要同时改变其他对象而不知道具体有多少对象有待改变。当一个对象必须通知其他对象而它又不能假定其他对象是谁。换言之你不希望这些对象紧密耦合的。 优点 目标和观察者之间的抽象耦合最少支持广播通信