# 这个是观察者基类
class Subject(object):def __init__(self):self._observers = []# 添加依赖的对象def attach(self, observer):if not observer in self._observers:self._observers.append(observer)# 取消添加def detach(self, observer):try:self._observers.remove(observer)except ValueError:pass# 这里只是通知上面注册的依赖对象新的变化def notify(self, modifier=None):for observer in self._observers:# 可以设置过滤条件,对不符合过滤条件的更新if modifier != observer:observer.update(self)# 观察者类
class Data(Subject):def __init__(self, name=''):super(Data, self).__init__()self.name = nameself._data = 0# python2.6新增的写法,获取属性为property,设置属性为(假设属性名字为x)@x.setter,删除为@x.deleter@propertydef data(self):return self._data@data.setterdef data(self, value):self._data = valueself.notify()# 这里有2个被观察者,也就是依赖的对象,每次Data有改变,这2个view都会变动
class HexViewer(object):def update(self, subject):print 'HexViewer: Subject %s has data 0x%x' % (subject.name, subject.data)class DecimalViewer(object):def update(self, subject):print 'DecimalViewer: Subject %s has data %d' % (subject.name, subject.data)if __name__ == '__main__':data1 = Data('Data 1')data2 = Data('Data 2')view1 = DecimalViewer()view2 = HexViewer()data1.attach(view1)data1.attach(view2)data2.attach(view2)data2.attach(view1)print "Setting Data 1 = 10"data1.data = 10print "Setting Data 2 = 15"data2.data = 15print "Setting Data 1 = 3"data1.data = 3print "Setting Data 2 = 5"data2.data = 5print "Update data1's view2 Because view1 is be filtered"data1.notify(modifier=view1)  print "Detach HexViewer from data1 and data2."data1.detach(view2)data2.detach(view2)print "Setting Data 1 = 10"data1.data = 10print "Setting Data 2 = 15"data2.data = 15

python观察者模式相关推荐

  1. 设计模式(Python)-观察者模式

    本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...

  2. python观察者模式observe

    python设计模式观察者模式observe 观察者模式是一个软件设计模式,一个主题对象博包涵一系列依赖他的观察者,自动通知观察者的主题对象的改变,通常会调用每个观察者的一个方法.这个设计模式非常适用 ...

  3. Python设计模式-观察者模式

    Python设计模式-观察者模式 代码基于3.5.2,代码如下; #coding:utf-8 # 观察者设计模式class observerInterface():def update(self,va ...

  4. python的编程模式-举例讲解Python设计模式编程中的访问者与观察者模式

    访问者模式我觉得Visitor模式是在补修改已有程序结构前提下,通过添加额外的访问者完成对代码功能的拓展 为什么这样用?当你的类层次较多,在某层结构中增加新的方法,要是在基类上面添加或者变更,可能破坏 ...

  5. 大话设计模式Python实现-观察者模式

    观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...

  6. python实现观察者模式_举例讲解Python设计模式编程中的访问者与观察者模式

    访问者模式我觉得Visitor模式是在补修改已有程序结构前提下,通过添加额外的访问者完成对代码功能的拓展 为什么这样用?当你的类层次较多,在某层结构中增加新的方法,要是在基类上面添加或者变更,可能破坏 ...

  7. python 设计模式 观察者_python设计模式之观察者模式

    说到观察者模式,在我脑海中总是闪现,这家伙跟消息队列的主题发布订阅有什么关系,虽然本人对消息队列没有很深的研究,但是凭直觉我就认为消息队列的实现就使用了观察者模式吧,所以本文就来模拟消息队列的丐版实现 ...

  8. python实现观察者模式_观察者模式--python

    参见:http://baike.baidu.com/view/1854779.htm http://blog.csdn.net/huangkangying/article/details/790160 ...

  9. 1.设计模式中监听模式(观察者模式)(Python实现)

    目录 1.什么是监听模式 2.监听模式设计思想 3.监听模式的框架模型 4.分别用框架模型和不用框架模型来解决下面的例子 5.模型说明 6.监听模式根据侧重可以分为推模型和拉模型 7.账号异常登录检测 ...

最新文章

  1. Python+OpenCV 图像处理系列(3)—— 画线、矩形、画圆、画椭圆、画多边形
  2. python元素定位id和name_Python+Selenium自动化软件测试实战:Xpath,class,id,name定位和Iframe框架跳转...
  3. 【读书笔记】iOS-iCloud编程
  4. JAVA连接solr报404,java-Solr管理员给出404错误
  5. 不了解这些“高级货”,活该你面试当炮灰。。。【石杉的架构笔记】
  6. 【Ubuntu】在Ubuntu 12.04 LTS上安装JDK6
  7. Eclipse 切换 SVN 地址
  8. 使用计算机辅助翻译,计算机辅助翻译方法
  9. 360度评估反馈实施的注意事项
  10. 接口管理工具Rap的安装
  11. 【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口
  12. You are currently rebasing branch ‘csindex/feature/index_info‘ on ‘d2ef4210a3‘.
  13. [React]网易云音乐Web PC端
  14. 1083 Cantor表
  15. android5.1 rom互刷,一加2 代通刷 5.1.1 ROM刷机包 个人适配 附加高级设置 稳定
  16. 图像金字塔实现图像缩放_一个简单的VueJS组件,用于图像放大/产品缩放
  17. 阿里重投内容电商,VR技术会成为马云的杀手锏吗?
  18. 第二次上机实践项目-项目4-穷举法-换分币
  19. 经典好诗 词。。。。。
  20. “数字云徽章”亮相东京奥运会

热门文章

  1. Ubuntu 20.04增加Deepin源以安装应用商城内最新版的微信、钉钉
  2. 两种常用的工作分解结构主要形式
  3. SCM(软件的配置管理)
  4. Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地
  5. AKVIS OilPaint(油画处理软件) v7.0.583
  6. PostGIS FME导入fbx格式模型
  7. 【python】unittest框架
  8. 不积跬步无以至千里016
  9. 洛谷题解——P1024:一元三次方程求解
  10. 速盘-不一样的度盘神器