学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式

按照小明明的设计模式抄抄看看。。

http://dongweiming.github.io/python-observer.html

# 这个是观察者基类
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 = name
        self._data = 0

    # python2.6新增的写法,获取属性为property,设置属性为(假设属性名字为x)@x.setter,删除为@x.deleter
    @property
    def data(self):
        return self._data

    @data.setter
    def data(self, value):
        self._data = value
        self.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 = 10
    print "Setting Data 2 = 15"
    data2.data = 15
    print "Setting Data 1 = 3"
    data1.data = 3
    print "Setting Data 2 = 5"
    data2.data = 5
    print "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 = 10
    print "Setting Data 2 = 15"
    data2.data = 15

时间: 2024-09-27 23:56:46

学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式的相关文章

学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式

说实话,感觉不是特别多,可能没遇到过多场面, 所以对应用场景没感觉吧. 反正,各种模式就是把类的实例传来传去,久而久之,产生了一些规律...:) # 轮子,引擎, 车身这些定义好了都不需要变动 class Wheel: def __init__(self, name): self.name = name def accept(self, visitor): # 每个visitor是同样的,但是其中的方法是不一样的,比如这里是visitWheel, # 然后传入了self,想想?他其实想做什么就能

反爬虫-菜鸟求助,大神请进:python爬取某东评论数据遇到的问题

问题描述 菜鸟求助,大神请进:python爬取某东评论数据遇到的问题 python爬取京东评论数据,爬10页的评论没问题,后面的评论就不断重复,到底是什么原因? 解决方案 先看是不是服务器返回的内容 然后就是你请求的参数有问题 所有重复请求 解决方案二: 应该是url没去重吧 解决方案三: 最近看到一个csdn的博客专门讲如何写电商爬虫的,地址是:http://blog.csdn.net/youmumzcs/article/details/51373830,楼主可以参考

《教孩子学编程(Python语言版)》——第1章 Python 基础—认识环境 1.1 认识Python

第1章 Python 基础-认识环境 如今,几乎任何东西之中都有一个计算机,例如电话.汽车.手表.电子游戏机.跑步机.贺卡或者机器人.计算机编程或编码,就是要告诉计算机如何执行一项任务,因此,理解如何编写代码,可以将计算机的能力控制在你的指间. 计算机程序,也叫作应用程序(applications或App),它告诉计算机做什么.Web App可以告诉计算机如何记录你喜欢的音乐:游戏App告诉计算机如何用逼真的图像显示一个古代的战场:一个简单的App可以让计算机绘制出如图1-1所示的类似六边形的.

Python基础框架和工具

Python基础框架和工具 最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Python的Anaconda进行科学计算环境的搭建非常方便. Anaconda是和Canopy类似的科学计算环境,安装非常方便,而且自带的conda包管理器也十分强大. 1. Anaconda介绍: 我们可以从http://continuum.io/downloads上下载适合你操作系统的Anacon

Tag是个什么东东

摘要: 写这篇文字是因为我曾对tag的不解,经过学习研究分析和大神的相助得以感悟,终理解其缘由.网络时代的好处就是想写就写又本着朋友帮宗旨-----我分享我快乐,所以我就想快乐一把 写这篇文字是因为我曾对tag的不解,经过学习研究分析和大神的相助得以感悟,终理解其缘由.网络时代的好处就是想写就写又本着朋友帮宗旨-----我分享我快乐,所以我就想快乐一把.也让读过此文的网友彻底解决写不好tag困惑. 我的信誓旦旦也不一定能打消童鞋们的疑虑,或许有人不屑,这也拿来说!也有人会说我还真不知呢?也许还有

《python 与数据挖掘 》一 第2章 Python基础入门

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第1章,第2.1节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 第2章 Python基础入门 本章是Python的基础章节,读者可以在这章中学习到丰富的Python基础知识.首先我们会从操作符和最简单的数字数据入手,然后就是流程控制,到这里读者能够对Python程序结构有一个清晰的认识.接着是较复杂的数据结构,主要涉及Python最常用的五大内建数据类型:列表,字符串,元组,

新人自学~!!WAS是个什么东东啊!!!??

问题描述 我不说我刚毕业--之前学的是COBOL--现在这公司要用J2EE--没学过啊!!好吧自学--自己看书--没人教--他们都忙我知道--偶尔问点问题--好吧一个月后书看完了--叫我写网页注册用户管理管理员管理这么一个系统--尼玛这是什么东西啊???好吧再自学--借JSP的书看--又是半个月--纳尼!要用TOMCAT!又是什么东东!?好吧--自己百度自学--又是半个月--搞出第一个jsp--再一个月后--写完了jsp的代码能跑而且功能齐全--叫我pu到WAS上面--我了个去!--------

Python基础10 反过头来看看

原文:Python基础10 反过头来看看 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   从最初的"Hello World",走到面向对象.该回过头来看看,教程中是否遗漏了什么. 我们之前提到一句话,"Everything is Object". 那么我们就深入体验一下这句话.   需要先要介绍两个内置函数,dir()和help() dir()用来查询一个类或者对象所有属性.你可以尝试一下 &

Python基础之函数用法实例详解_python

本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def,def是可执行的语句--函数并不存在,直到Python运行了def后才存在. 函数是通过赋值传递的,参数通过赋值传递给函数 def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def <name>(arg1,arg2,arg3,--,argN): <stateme