Python转载版

https://github.com/faif/python-patterns/blob/master/behavioral/observer.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-"""
http://code.activestate.com/recipes/131499-observer-pattern/*TL;DR80
Maintains a list of dependents and notifies them of any state changes.
"""from __future__ import print_functionclass Subject(object):def __init__(self):self._observers = []def attach(self, observer):if observer not in self._observers:self._observers.append(observer)def detach(self, observer):try:self._observers.remove(observer)except ValueError:passdef notify(self, modifier=None):for observer in self._observers:if modifier != observer:observer.update(self)# Example usage
class Data(Subject):def __init__(self, name=''):Subject.__init__(self)self.name = nameself._data = 0@propertydef data(self):return self._data@data.setterdef data(self, value):self._data = valueself.notify()class HexViewer:def update(self, subject):print(u'HexViewer: Subject %s has data 0x%x' %(subject.name, subject.data))class DecimalViewer:def update(self, subject):print(u'DecimalViewer: Subject %s has data %d' %(subject.name, subject.data))# Example usage...
def 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(u"Setting Data 1 = 10")data1.data = 10print(u"Setting Data 2 = 15")data2.data = 15print(u"Setting Data 1 = 3")data1.data = 3print(u"Setting Data 2 = 5")data2.data = 5print(u"Detach HexViewer from data1 and data2.")data1.detach(view2)data2.detach(view2)print(u"Setting Data 1 = 10")data1.data = 10print(u"Setting Data 2 = 15")data2.data = 15if __name__ == '__main__':main()### OUTPUT ###
# Setting Data 1 = 10
# DecimalViewer: Subject Data 1 has data 10
# HexViewer: Subject Data 1 has data 0xa
# Setting Data 2 = 15
# HexViewer: Subject Data 2 has data 0xf
# DecimalViewer: Subject Data 2 has data 15
# Setting Data 1 = 3
# DecimalViewer: Subject Data 1 has data 3
# HexViewer: Subject Data 1 has data 0x3
# Setting Data 2 = 5
# HexViewer: Subject Data 2 has data 0x5
# DecimalViewer: Subject Data 2 has data 5
# Detach HexViewer from data1 and data2.
# Setting Data 1 = 10
# DecimalViewer: Subject Data 1 has data 10
# Setting Data 2 = 15
# DecimalViewer: Subject Data 2 has data 15

Python转载版

转载于:https://www.cnblogs.com/demonzk/p/9035645.html

【编程思想】【设计模式】【行为模式Behavioral】观察者模式Observer相关推荐

  1. Javascript乱弹设计模式系列(1) - 观察者模式(Observer)

    前言 博客园谈设计模式的文章很多,我也受益匪浅,包括TerryLee.吕震宇等等的.NET设计模式系列文章,强烈推荐.对于我,擅长于前台代码的开发,对于设计模式也有一定的了解,于是我想结合Javasc ...

  2. 设计模式(行为型)之观察者模式(Observer Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  3. JavaScript设计模式——Observe模式(观察者模式)

    通常一个优秀的项目,会使用到很多的设计模式,这些设计模式在我们的解决方案中,会起到十分重要的作用,它的存在,能使项目的结构更加简洁.清晰.易于理解. 所以了解常用的设计模式,会让我们在日常开发更加得心 ...

  4. 设计模式----行为型模式之观察者模式(Observer Pattern)

    下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 ...

  5. 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现

    文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...

  6. 设计模式之(十四)观察者模式Observer

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  7. 面向对象编程思想(2)--策略模式

    定义 策略模式 官方定义:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换. 个人理解:选择执行多个规则中的某个规则. C#实现 需求1: 开发一个商场收银系统v1.0 三下五除二 ...

  8. 设计模式——状态模式、观察者模式(行为型模式)

    状态模式包含以下主要角色. 环境(Context)角色:也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理. 抽象状态(State)角色:定义一个 ...

  9. java 多线程 临界区_多线程编程的设计模式 临界区模式

    临界区模式 Critical Section Pattern 是指在一个共享范围中只让一个线程执行的模式. 它是所有其它多线程设计模式的基础,所以我首先来介绍它. 把着眼点放在范围上,这个模式叫临界区 ...

  10. 极速理解设计模式系列:2.观察者模式(Observer Pattern)

    4个角色:被观察者(Subject/目标对象接口),具体被观察者(ConcreteSubject/具体目标对象),观察者(Observer),具体观察者(ConcreteObserver)       ...

最新文章

  1. 【linux+C】神器 vim + 指针相关客串
  2. halcon自动对焦算法
  3. 在国外千万不要以为别人都听不懂中文
  4. linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法
  5. 微软发布 .Net Core 3.0 版重大更新,对开发者来说意味着什么?
  6. 寻求web和数据库开发的小哥哥
  7. 在ECSHOP模板商品列表页 显示商品的评论等级和评论数量
  8. 1060 Are They Equal (25 分)科学计数法,stl中string的各种函数用法
  9. 2021最新千月影视全新改版影视app系统源码(全开源)源码下载
  10. Android 人脸识别签到(二)
  11. OFD文件怎么打开?OFD免费转PDF?
  12. android5.1 Recovery添加从U盘升级功能【转】
  13. java实现word模板文件填充
  14. 笔记:Smith圆图及其计算
  15. crypto-初识RSA(xctf)
  16. MAC自带的Java版本以及Java安装目录查看
  17. 02. 工厂设计模式
  18. Aspose.Words使用教程之如何在文档中添加水印
  19. ClickOnce项目发布报错:Unable to install or run the application... requires stdole.ll ...in the GAC
  20. 如何获取京东Cookie教程

热门文章

  1. SAP Fiori应用里Cross Application跳转的一些常见错误
  2. 如何使用SAP CRM Marketing Survey创建一个市场问卷调查
  3. 每小时的数据mysql_荐 mysql查询每小时数据和上小时数据的差值
  4. high severity error mysql_pg将运行日志导入表中的方法及时区问题解决
  5. 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
  6. deinstall 卸载grid_oracle 11g RAC手动卸载grid,no deinstall   .
  7. UE4学习-创建基于C++的场景
  8. java jsp中控件绑定_jsp页面常用控件
  9. onpagefinished等了很久才执行_其实,无所事事的日子才过得最累
  10. 雷军:如果程序人生的话,这条路太漫长