python设计模式第十天【观察者模式】
1.应用场景
(1)监听事件驱动程序中的外部事件
(2)监听某个对象的状态变化
(3)发布-订阅模型中,消息出现时通知邮件列表中的订阅者
2. 观察者模式UML图

3. 代码实现:
#!/usr/bin/env python
#! _*_ coding:UTF-8 _*_
from abc import ABCMeta, abstractmethod
class Subject(object):
def __init__(self):
'''初始化监听器列表'''
self.__observerList = []
def registerObserver(self, observer):
'''注册一个监听器对象'''
self.__observerList.append(observer)
def unregisterObserver(self, observer):
'''解除注册一个监听器对象'''
self.__observerList.remove(observer)
def notifyObservers(self):
'''通知监听器对象'''
for observer in self.__observerList:
observer.notify()
class ConcreteSubject(Subject):
def action(self):
print "action"
self.notifyObservers()
class Observer(object):
@abstractmethod
def notify(self):
pass
class ConcreteObserverA(Observer):
def notify(self):
print "notify of observer A"
class ConcreteObserverB(Observer):
def notify(self):
print "notify of observer B"
if __name__ == "__main__":
concreteSubject = ConcreteSubject()
concreteObserverA = ConcreteObserverA()
concreteObserverB = ConcreteObserverB()
concreteSubject.registerObserver(concreteObserverA)
concreteSubject.registerObserver(concreteObserverB)
concreteSubject.action()
结果:
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day10_observer/observer_test.py action notify of observer A notify of observer B Process finished with exit code 0
python设计模式第十天【观察者模式】的更多相关文章
- python设计模式---行为型之观察者模式
比较常用咯~~ from django.test import TestCase from abc import ABCMeta, abstractmethod # 行为型设计模式---观察者模式 c ...
- C#设计模式之十六观察者模式(Observer Pattern)【行为型】
一.引言 今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西.今天我们开始讲“行为 ...
- 设计模式之十:观察者模式(Observer)
观察者模式: 在对象之间定义了一种一对多的依赖关系.当一个对象改变它的状态时,全部依赖它的对象会自己主动接收通知并更新自己的状态. Define a one-to-many dependency be ...
- python设计模式第十九天【职责链模式】
1.应用场景 (1)将一个任务拆分为具有顺序的多个部分,每个类完成相应的部分,并且顺序执行 (2)软件窗口的消息传播 (3)SERVLET容积的过滤器Filter的实现 2.代码实现 #!/usr/b ...
- python设计模式第二十四天【命令模式】
1.使用场景 (1)调用过程比较繁琐,需要封装 (2)调用参数需要进行处理封装 (3)需要添加额外的功能,例如,日志,缓存,操作记录等 2.代码实现 #!/usr/bin/env python #! ...
- python设计模式第二十五天【访问者模式】
1.应用场景 (1)将数据和行为进行分离,不同的角色具有不同的行为 2.代码实现
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- 最全36种python设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发人员经过 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
随机推荐
- centos7修改系统语言为简体中文
centos7修改系统语言为简体中文 说明 自己装系统时一般都可以自定义选择系统语言.可是云端服务器一般都是安装好的镜像,默认系统语言为英文,对于初学者可能还会有搞不懂的计算机词汇.这里简单说一下ce ...
- 【vue】vue +element 搭建项目,组件之间通信
父子组件通信 父 通过props属性给 子传递数据 子 操作 父 this.$parent.XXX 子通过$emit传递参数 或者通过vue-bus vue-bus既可以实现父子组件之间的通信,也可 ...
- day25 Python __setattr__
#__getattr__只有在使用点调用属性且属性不存在的时候才会触发 class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(se ...
- day2-安装python以及基本使用
安装Python windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机]- ...
- Linux 通过rinetd端口转发来访问内网服务
可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...
- Spring Security(六):2.3 Release Numbering
It is useful to understand how Spring Security release numbers work, as it will help you identify th ...
- Python+Pycharm—学习—pip
1.pip是干什么的? 2.pip怎么安装? 3.pip怎么用?
- 用Python实现大文件分割
python代码如下: import sys,os kilobytes = 1024 megabytes = kilobytes*1000 chunksize = int(200*megabytes) ...
- 一篇 SpringData+JPA 总结
概述 SpringData,Spring 的一个子项目,用于简化数据库访问,支持 NoSQL 和关系数据库存储 SpringData 项目所支持 NoSQL 存储 MongDB(文档数据库) Neo4 ...
- Python—re模块
re模块 正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re 常用的表达式规则 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹 ...