【编程思想】【设计模式】【行为模式Behavioral】观察者模式Observer
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相关推荐
- Javascript乱弹设计模式系列(1) - 观察者模式(Observer)
前言 博客园谈设计模式的文章很多,我也受益匪浅,包括TerryLee.吕震宇等等的.NET设计模式系列文章,强烈推荐.对于我,擅长于前台代码的开发,对于设计模式也有一定的了解,于是我想结合Javasc ...
- 设计模式(行为型)之观察者模式(Observer Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- JavaScript设计模式——Observe模式(观察者模式)
通常一个优秀的项目,会使用到很多的设计模式,这些设计模式在我们的解决方案中,会起到十分重要的作用,它的存在,能使项目的结构更加简洁.清晰.易于理解. 所以了解常用的设计模式,会让我们在日常开发更加得心 ...
- 设计模式----行为型模式之观察者模式(Observer Pattern)
下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 ...
- 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现
文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...
- 设计模式之(十四)观察者模式Observer
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
- 面向对象编程思想(2)--策略模式
定义 策略模式 官方定义:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换. 个人理解:选择执行多个规则中的某个规则. C#实现 需求1: 开发一个商场收银系统v1.0 三下五除二 ...
- 设计模式——状态模式、观察者模式(行为型模式)
状态模式包含以下主要角色. 环境(Context)角色:也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理. 抽象状态(State)角色:定义一个 ...
- java 多线程 临界区_多线程编程的设计模式 临界区模式
临界区模式 Critical Section Pattern 是指在一个共享范围中只让一个线程执行的模式. 它是所有其它多线程设计模式的基础,所以我首先来介绍它. 把着眼点放在范围上,这个模式叫临界区 ...
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
4个角色:被观察者(Subject/目标对象接口),具体被观察者(ConcreteSubject/具体目标对象),观察者(Observer),具体观察者(ConcreteObserver) ...
最新文章
- 【linux+C】神器 vim + 指针相关客串
- halcon自动对焦算法
- 在国外千万不要以为别人都听不懂中文
- linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法
- 微软发布 .Net Core 3.0 版重大更新,对开发者来说意味着什么?
- 寻求web和数据库开发的小哥哥
- 在ECSHOP模板商品列表页 显示商品的评论等级和评论数量
- 1060 Are They Equal (25 分)科学计数法,stl中string的各种函数用法
- 2021最新千月影视全新改版影视app系统源码(全开源)源码下载
- Android 人脸识别签到(二)
- OFD文件怎么打开?OFD免费转PDF?
- android5.1 Recovery添加从U盘升级功能【转】
- java实现word模板文件填充
- 笔记:Smith圆图及其计算
- crypto-初识RSA(xctf)
- MAC自带的Java版本以及Java安装目录查看
- 02. 工厂设计模式
- Aspose.Words使用教程之如何在文档中添加水印
- ClickOnce项目发布报错:Unable to install or run the application... requires stdole.ll ...in the GAC
- 如何获取京东Cookie教程
热门文章
- SAP Fiori应用里Cross Application跳转的一些常见错误
- 如何使用SAP CRM Marketing Survey创建一个市场问卷调查
- 每小时的数据mysql_荐 mysql查询每小时数据和上小时数据的差值
- high severity error mysql_pg将运行日志导入表中的方法及时区问题解决
- 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
- deinstall 卸载grid_oracle 11g RAC手动卸载grid,no deinstall .
- UE4学习-创建基于C++的场景
- java jsp中控件绑定_jsp页面常用控件
- onpagefinished等了很久才执行_其实,无所事事的日子才过得最累
- 雷军:如果程序人生的话,这条路太漫长