监听模式

目录

 

一、监听模式概

二、代码实现

三、监听模式在openstack中的使用

1.neutron_lib.callbacks.registry模块

2.rabbitmq


一、监听模式概

监听模式(观察者模式)是指观察对象监听被观察对象,当被观察对象发生变化时,所有的观察对象都能及时的知道并且自动更新,被观察对象和观察对象之间的关系是1对多。

二、代码实现

在示例中waterHeater类相当于一个被观察对象,WashingMode和DrinkingMode类相当于观察对象,waterHeater类每一个温度变化都会将这个变化通知给WashingMode和DrinkingMode类,WashingMode和DrinkingMode类会根据收到的通知完成相应的处理。

# -*- coding: utf-8 -*- 
# @Author : zhangpanpan
# @File : ztest2.py

from abc import abstractmethod

class WaterHeater:
    def __init__(self):
        self.__observices = []
        self.__temperature = 25

    def getTemperature(self):
        return self.__temperature

    def setTemperature(self, temperature):
        self.__temperature = temperature
        print "当前的温度为: {}摄氏度".format(self.__temperature)
        self.notifies()

    def addObservice(self, observice):
        self.__observices.append(observice)

    def notifies(self):
        for o in self.__observices:
            o.update(self)


class Observice:
    @abstractmethod
    def update(self, waterHeater):
        pass

class WashingMode(Observice):
    def update(self, waterHeater):
        if waterHeater.getTemperature() == 50:
            print "水已烧好,可以洗澡,当前水温为: {}".format(waterHeater.getTemperature())

class DrinkingMode(Observice):
    def update(self, waterHeater):
        if waterHeater.getTemperature() == 100:
            print "水已烧好,可以饮用,当前水温为: {}".format(waterHeater.getTemperature())

def testWaterHeater():
    heater = WaterHeater()
    washingObjser = WashingMode()
    drinkingObjser = DrinkingMode()
    heater.addObservice(washingObjser)
    heater.addObservice(drinkingObjser)
    for i in range(110):
        heater.setTemperature(i)


testWaterHeater()

#运行结果
水已烧好,可以洗澡,当前水温为: 50
水已烧好,可以饮用,当前水温为: 100

三、监听模式在openstack中的使用

1.neutron_lib.callbacks.registry模块

neutron_lib.callbacks.registry模块称为消息的订阅/发布模块,使用registry.notify方法来发布消息,它相当于一个被观察者对象;registry.subscribe用来订阅消息,它相当于一个观察对象。

2.rabbitmq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值