python设计模式之观察者模式
2016-04-24 20:19
543 查看
观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。观察者模式在状态检测和事件处理等场景中是非常有用的。这种模式确保一个核心对象可以由一组未知并可能正在扩展的“观察者”对象来监控。一旦核心对象的某个值发生变化,它通过调用update()函数让所有观察者对象知道情况发生了变化。各个观察者在核心对象发生变化时,有可能会负责处理不同的任务;核心对象不知道也不关心这些任务是什么,通常观察者也同样不知道,不关心其他的观察者正在做什么。
class Inventory: """docstring for ClassName""" def __init__(self): self.observers=[] self._product=None self._quantity=0 def attach(self,observer): self.observers.append(observer) @property def product(self): return self._product @product.setter def product(self,value): self._product=value self._update_observers() @property def quantity(self): return self._quantity @quantity.setter def quantity(self,value): self._quantity=value self._update_observers() def _update_observers(self): for observer in self.observers: observer() class ConsoleObserver: """docstring for ConsoleObserver""" def __init__(self, Inventory): self.Inventory=Inventory def __call__(self): print(self.Inventory.product) print(self.Inventory.quantity)
>>> import ObserverPatternDemo >>> i=ObserverPatternDemo.Inventory() >>> c=ObserverPatternDemo.ConsoleObserver(i) >>> i.attach(c) >>> i.product="Hello world!" Hello world! 0 >>> i.quantity=999 Hello world! 999
这个对象两个属性,对其执行赋值,便调用_update_observers方法。该方法所做的工作就是对所有可用的观察者进行遍历,好让他们知道发生了一些变化。这里直接调用__call__函数来处理变化。这在其他许多编程语言是不能的,在python中是一种让我们代码可读性的一种捷径。
相关文章推荐
- Python 常用函数总结
- 手把手实现AdaBoost算法
- Using Database with Python -Basic Structured Query Language-Email Database Demo
- Python学习笔记10
- Beautiful Soup 示例解析html文件(python)
- python中os/sys/platform模块区别
- Python 开发技巧和陷阱
- 【Python】__all__ 暴露接口
- 《用 Python 学微积分》笔记 3
- numpy中的nonzero()的用法
- Caesar_Ciphers(凯撒移位)python描述
- numpy 中array参数'f'与order='f'区别
- python中单引号,双引号,多引号区别
- DayDayUP_Python自学记录[4]_Python运算符
- python基础练习(四)—— 读取文件内容
- 最实用windows 下python+numpy安装
- DayDayUP_Python自学记录[3]_Python条件判断语句(if while for)
- python 常用 语法 库函数
- Python Scrapy 学习----自动爬取网页
- Python爬虫辅助利器PyQuery模块的安装使用攻略