标签:observable .__ Python notifyData self 观察者 模式 设计模式 def
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @Time :2022/5/23 9:48 @Author : @File :observer.py @Version :1.0 @Function:观察者模式/监听模式 """ """ 观察者基类 """ class ObserverBase: def update(self, observable, notifyData): """ 观察者收到通知后做对应的修改 @param observable: 被观察者对象(因为要在此方法里获取被观察者中的被观察数据 所以必须传被观察对象) @param notifyData: 通知的数据 @return: """ pass class ObservableBase: def __init__(self): # 观察者列表 self.__observerList = [] def addObserver(self, obServer): """ 添加观察者 @param obServer: 观察者对象 @return: """ self.__observerList.append(obServer) def delObserver(self, obServer): """ 删除观察者 @param obServer: 观察者对象 @return: """ self.__observerList.remove(obServer) def notifies(self, notifyData): """ 通知观察者 @param notifyData: 给观察者通知的数据 @return: """ for observer in self.__observerList: observer.update(self, notifyData) class Observable(ObservableBase): def __init__(self): super().__init__() # 被观察的数据 self.__value = None def getValue(self): return self.__value def setValue(self, value): self.__value = value self.notifies(f"当前值={self.__value}") class Observer1(ObserverBase): def update(self, observable, notifyData): if isinstance(observable, Observable) and observable.getValue() > 70: print(">70") class Observer2(ObserverBase): def update(self, observable, notifyData): if isinstance(observable, Observable) and 50 < observable.getValue() < 60: print("50<Num<60") class Observer3(ObserverBase): def update(self, observable, notifyData): if isinstance(observable, Observable) and observable.getValue() == 100: print("==100") if __name__ == '__main__': # 观察者 observe1 = Observer1() observe2 = Observer2() observe3 = Observer3() # 被观察者 observable = Observable() # 订阅通知 observable.addObserver(observe1) observable.addObserver(observe2) observable.addObserver(observe3) for i in range(101): observable.setValue(i)
标签:observable,.__,Python,notifyData,self,观察者,模式,设计模式,def 来源: https://www.cnblogs.com/danhuai/p/16302569.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。