美文网首页
Python 之观察者模式

Python 之观察者模式

作者: 极客匠 | 来源:发表于2020-02-04 14:02 被阅读0次

观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对象都会得到通知,并被自动更新。

特性

观察者模式的通知方式可以通过直接调用等同步方式实现(如函数调用,HTTP接口调用等),也可以通过消息队列异步调用(同步调用指被观察者发布消息后,必须等所有观察者响应结束后才可以进行接下来的操作;异步调用指被观察者发布消息后,即可进行接下来的操作)。事实上,许多开源的消息队列就直接支持发布-订阅模式,如Zero MQ等。

xx

优点

  1. 观察者与被观察者之间是抽象耦合的;
  2. 可以将许多符合单一职责原则的模块进行触发,也可以很方便地实现广播。

缺点

  1. 观察者模式可能会带来整体系统效率的浪费;
  2. 如果被观察者之间有依赖关系,其逻辑关系的梳理需要费些心思。

应用场景

1. 消息交换场景。如上述说到的消息队列等;
2. 多级触发场景。比如支持中断模式的场景中,一个中断即会引发一连串反应,就可以使用观察者模式。

代码示例

class ObServer:
    def update(self):
        pass


class AlarmSensor(ObServer):

    def update(self):
        self.run()

    def run(self):
        print('alarm ring...')


class WaterSprinker(ObServer):

    def update(self):
        self.run()

    def run(self):
        print("spray Water...")


class EmergencyDialer(ObServer):

    def update(self):
        self.run()

    def run(self):
        print("Dial 119...")


class Observed:
    observers = []
    action = ""

    def addObserver(self, observer):
        self.observers.append(observer)

    def notifyAll(self):
        for obs in self.observers:
            obs.update()


class SmokeSensor(Observed):
    def setAction(self, action):
        self.action = action

    def isFire(self):
        return True


if __name__ == '__main__':
    observed = SmokeSensor()
    observed.addObserver(AlarmSensor())
    observed.addObserver(WaterSprinker())
    observed.addObserver(EmergencyDialer())
    if observed.isFire():
        observed.setAction("On Fire!")
        observed.notifyAll()

每天多努力那么一点点,积少成多

相关文章

  • 观察者模式_20190912(python)

    一、观察者模式介绍 二、观察者模式UML 三、python实现观察者模式(demo1、2) 1、demo1 """...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • 2017-12-26

    今天黄老师讲解了python观察者模式,观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和被观...

  • 行为型模式:观察者模式

    行为型模式:观察者模式 十一大行为型模式之七:观察者模式。 简介 姓名 :观察者模式英文名 :Observer P...

  • Python 之观察者模式

    观察者模式也叫发布-订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得当该对象状态改变时,所有依赖于它的对...

  • iOS模式设计之--行为型:7、观察者模式(Observer)

    iOS模式设计之--行为型:7、观察者模式(Observer)

  • 2017-12-27

    今天上午黄老师主要讲解他的项目,用python讲解了观察者模式。实现观察者模式的时候要注意,观察者和被观察对象之间...

  • python设计模式

    观察者模式 python观察者模式是一种设计模式需求:员工上班在偷偷看股票,拜托前台一旦老板进来,就通知他们,让他...

  • Javaの设计模式之观察者模式

    推荐阅读:《设计模式之禅》 Observer Pattern 设计模式之观察者模式(发布订阅模式) Demo gi...

  • Python观察者模式

    [python|高级篇|笔记|设计模式|观察者模式] 这两天读了[Head First设计模式][1]和[Pyth...

网友评论

      本文标题:Python 之观察者模式

      本文链接:https://www.haomeiwen.com/subject/kzyrxhtx.html