设计模式--观察者模式--python
观察者模式: 对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。 主要解决: 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。 当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。 例子:
主体:报社,报社的业务就是出版报纸
只要有新的报值更新,就会送给订阅了的读者A,读者B等等 观察者:读者,AB订阅了报纸,那么只要有更新,就会送给AB
A取消了订阅,那么即使报纸更新了,也不会送给A,
#主体
class Subject(object):
def __init__(self):
#_observers [元素是观察者observer的对象]
#这里将主体和观察者绑定到一块儿了 self._observers = [] #增加观察/订阅者
def add_observer(self, observer):
if not observer in self._observers:
self._observers.append(observer)
#删除观察/订阅者
def delete_observer(self, observer):
self._observers.remove(observer) #通知观察/订阅者 更新
def notify_observer(self):
for observer in self._observers:
#调用的观察者的自定义的update方法
observer.update(self) # 具体的主题(新闻),这里NewsData继承了Sudject
class NewsData(Subject): def __init__(self, name,data=0):
#等于super(Subject,self).__init__()
#不覆盖subjet父类的init方法
Subject.__init__(self)
self.name = name
self.data=data def begin_change(self, value):
self.data = value
self.notify_observer() #具体观察者observer1号
class ObserverA:
#subject变化后,依赖subject的那部分数据也要跟着更新
#此方法早Subject的notify_observers中被调用 def update(self,newsdata):
print('我是订阅者A,正在的新闻名称%s, 第%s次变化' %
(newsdata.name, newsdata.data))
#具体观察者observer2号
class ObserverB:
#subject变化后,依赖subject的那部分数据也要跟着更新
def update(self,newsdata):
print('我是订阅者B,正在的新闻名称%s, 第%s次变化' %
(newsdata.name, newsdata.data)) #主体开始发布新闻
newsdata=NewsData('北京突发新闻')
observera=ObserverA()
observerb=ObserverB()
#添加订阅者
newsdata.add_observer(observera)
newsdata.add_observer(observerb)
#通知订阅着
newsdata.begin_change(4) #订阅者无序给便任何代码,就可以随着主题更新而更新了
# 我是订阅者A,正在的新闻名称北京突发新闻, 第4次变化
# 我是订阅者B,正在的新闻名称北京突发新闻, 第4次变化
设计模式--观察者模式--python的更多相关文章
- 设计模式及Python实现
设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样你就能一次又一次地使用该方案而不必做重复劳动.” 设计 ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- 浅谈设计模式及python实现
设计模式及Python实现 设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样你就能一次又一次地使用 ...
- 18. 星际争霸之php设计模式--观察者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- linkin大话设计模式--观察者模式
linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- js设计模式-观察者模式
定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...
- 【设计模式】Java设计模式 - 观察者模式
[设计模式]Java设计模式 - 观察者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 @一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...
- 学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式
按照小明明的设计模式抄抄看看.. http://dongweiming.github.io/python-observer.html # 这个是观察者基类 class Subject(object): ...
随机推荐
- JavaJDBC【一、概述】
其实这个内容在学习java基础的时候就有看过了,只是没有详细整理,在这再整理一下 数据库操作对于任何一门后端语言来说都是很重要的 JDBC:Java Data Base Connectivity 内容 ...
- Odoo的 base 模型
Odoo 内核中有一个base插件模块.它提供了 Odoo 应用所需的基本功能.然后有一组内置插件模块来提供标准产品中的官方应用和功能.base模块中包含两类模型: 信息仓库(Information ...
- win10电脑配置
微信 QQ 电脑管家 Chrome 坚果云 Sublime VLC 网易云音乐 Acrobat Reader DC PS git potplayer TeamViewer 有道云笔记/协作 百度网盘/ ...
- 【vuex】mutation和action的区别
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } ...
- 部署nginx脚本
cd nginx-1.12.2useradd -s /sbin/nologin nginx./configuremakemake installyum -y install mariadb maria ...
- FutureWarning: get_value is deprecated and will be removed in a future release. Please use .at[] or .iat[] accessors instead print(labels_df.get_value(patients,col=1))
这是因为pandas的版本高了,0.21之后就已经将这个方法干掉了.直接装成0.20之前的就好
- Storm实践(二):集群搭建
集群规划 角色 IP hostname nimbus 192.168.100.101 dda supervisor 192.168.100.102 ddb supervisor 192.168.100 ...
- 一些需要禁用的PHP危险函数(disable_functions)
一些需要禁用的PHP危险函数(disable_functions) 有时候为了安全我们需要禁掉一些PHP危险函数,整理如下需要的朋友可以参考下 phpinfo() 功能描述:输出 PHP 环境信息 ...
- 查看hive的信息
一.Hive下查看数据表信息的方法方法1:查看表的字段信息desc table_name; 方法2:查看表的字段信息及元数据存储路径desc extended table_name; 方法3:查看表的 ...
- hivesql-一个表中的数据不在另一个表中
如何最有效的判断 一个表中的数据不在另一个表中 两个方法一个是join 另一个是 exist 方法