Python设计模式:观察者模式
发布时间:2020-12-20 10:06:29 所属栏目:Python 来源:网络整理
导读:观察者模式中的主题对象一般存在着一个其他服务依赖的核心服务,并且维护着其他依赖此核心服务的对象列表(即观察者或监视者列表),当主题对象发生变化时,观察者应该改变自己的状态或者进行某些操作 观察者模式中的三个角色: 主题: 即观察者观察的对象,
观察者模式中的主题对象一般存在着一个其他服务依赖的核心服务,并且维护着其他依赖此核心服务的对象列表(即观察者或监视者列表),当主题对象发生变化时,观察者应该改变自己的状态或者进行某些操作 观察者模式中的三个角色:
主题的两种通知方式:
观察者模式的优点:
其他注意点:
简单示例: from abc import ABCMeta,abstractmethod class Publisher: """被观察者:发布/订阅关系中的发布对象""" def __init__(self): self.subscribers = [] self.latest_content = None def set_content(self,content): 有新消息时,发布新的消息""" self.latest_content = content self.publish() get_latest_content(self): 获取最新的消息""" return self.latest_content register(self,subscriber): 注册一个新的订阅者 self.subscribers.append(subscriber) publish(self): 发布消息并通知订阅的用户for subscriber in self.subscribers: subscriber.notify() class Subscriber(metaclass=ABCMeta): 观察者的抽象类:需要定义一个通知接口,用于发布对象通知订阅的用户 @abstractmethod notify(self): pass SubscriberA(Subscriber): 观察者A:发布/订阅关系中的订阅者,当订阅的发布者有新的变化或动态的时候能及时收到通知(self): self.my_publisher = subscribe(self,publisher): 订阅并进行注册 self.my_publisher = publisher self.my_publisher.register(self) notify(self): 获取最新消息 latest_content = self.my_publisher.get_latest_content() print(self,latest_content) SubscriberB(Subscriber): 观察者B:发布/订阅关系中的订阅者,当订阅的发布者有新的变化或动态的时候能及时收到通知if __name__ == '__main__': new_publisher = Publisher() subscriber_a = SubscriberA() subscriber_a.subscribe(new_publisher) subscriber_b = SubscriberB() subscriber_b.subscribe(new_publisher) new_publisher.set_content(This is a new message!') ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python – PyLint:使用可能未定义的循环变量警告
- python – 当使用futures.ProcessPoolExecutor而不是future
- python格式化字符串实例总结
- 小猪佩奇身上纹!下一句呢?我用Python二十秒就能画出一个小
- python – Google App Engine,任务队列
- python – tornado使用AsyncHTTPClient和gen来请求url,使用
- python – UTF-8中的中文字符的上限和下限是多少?
- 详解Python的Django框架中的Cookie相关处理
- Django——视图基础
- python – django jsonfield保存到数据库