关闭

Python设计模式(十七)【观察者模式】

标签: python设计模式对象class
1241人阅读 评论(0) 收藏 举报
分类:

勇敢,世界就会让步。如果有时候你被它打败了,不断地勇敢再勇敢,它就会屈服。

"""观察者模式"""
class 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:
            pass

    def notify(self, modifier=None):
        for observer in self._observers:
            if modifier != observer:
                observer.update(self)

#用法示例
class Data(Subject):

    def __init__(self, name=''):
        Subject.__init__(self)
        self.name = name
        self._data = 0

    @property
    def data(self):
        return self._data

    @data.setter
    def data(self, value):
        self._data = value
        self.notify()

class HexViewer:
    def update(self, subject):
        print('十六进制查看器: 主题 %s 有数据 0x%x' % (subject.name, subject.data))

class DecimalViewer:
    def update(self, subject):
        print('十进制查看器: 主题 %s 有数据 %d' %
              (subject.name, subject.data))

# 用法示例...
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("设置数据1变量 = 10")
    data1.data = 10
    print("设置数据2变量 = 15")
    data2.data = 15

    print("设置数据1变量 = 3")
    data1.data = 3
    print("设置数据2变量 = 5")
    data2.data = 5

    print("从data1和data2分离HexViewer。")
    data1.detach(view2)
    data2.detach(view2)

    print("设置数据1变量 = 10")
    data1.data = 10
    print("设置数据2变量 = 15")
    data2.data = 15

if __name__ == '__main__':
    main()

结果如图:

这里写图片描述

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

深入浅出设计模式python版——观察者模式(observer)

书中第二个设计模式——观察者模式 首先,祭出类图 然后是java内置的观察者模式类图 书中举得例子:
  • tuantuanlin
  • tuantuanlin
  • 2016-04-24 22:51
  • 1531

设计模式(五)观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听莫一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们...
  • itachi85
  • itachi85
  • 2016-03-02 17:41
  • 37542

[设计模式as3版]二.观察者模式

发布者package { public interface Subject { function addObserver(observer:Observer):void; funct...
  • liushen829475
  • liushen829475
  • 2013-06-21 18:00
  • 594

设计模式C++实现——观察者模式

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。        观察者模式结构图如下:            ...
  • walkerkalr
  • walkerkalr
  • 2014-06-04 19:51
  • 1168

设计模式-深入解析观察者模式(Observer)

在上篇设计模式上我们继续前进把,苦逼(酷毙)的程序员一刻都不能松懈的,要紧跟脚步,每天都学习啊!!学了策略模式,我自己去用设计模式写了几个例子,感觉还扣以啊。下面继续总结一下观察者模式的学习,如有不正...
  • qq_29282475
  • qq_29282475
  • 2015-12-07 16:16
  • 1243

Java设计模式(观察者模式JDK自带)

JDK自带的观察者模式和我们上一节说的基本相似,也有通用的观察协议规则 Observer,这个接口中只有一个方法,就是update方法 public interface Observer { ...
  • xyjwsj
  • xyjwsj
  • 2017-02-15 16:47
  • 669

设计模式--观察者模式、状态模式

【观察者模式】          多个观察者同时监听一个主题,一旦主题对象发生改变便会通知所有的观察者对象,并相应自己的更新事件!                 ...
  • u012466304
  • u012466304
  • 2014-12-09 17:40
  • 1909

Java设计模式之观察者模式

本文继续介绍23种设计模式系列。介绍的是观察者模式。
  • jason0539
  • jason0539
  • 2015-04-16 07:32
  • 29902

Android设计模式(十一)-观察者模式

观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统。这个模式的重要作用就是将观察者和被观察者解耦,使他们之间的依赖更小甚至没有。定义定义对象一种一对多的依赖关系,使得每当一个对象...
  • qq_25806863
  • qq_25806863
  • 2017-04-05 00:26
  • 563

设计模式在游戏开发中的应用之观察者模式

观察者模式 1.通俗的定义         触发事件的一方不关心谁来处理,处理事件的一方不关心事件是从哪里来的。观察者模式就是让观察者与被观察者彻底解耦。 2.2.结构图如下(图片来源与网络): ...
  • yue19870813
  • yue19870813
  • 2016-11-12 16:44
  • 643
    个人资料
    • 访问:1195997次
    • 积分:17405
    • 等级:
    • 排名:第643名
    • 原创:312篇
    • 转载:852篇
    • 译文:123篇
    • 评论:290条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝