当前位置: 首页 > wzjs >正文

网站建设技术服务协议济南seo网站排名关键词优化

网站建设技术服务协议,济南seo网站排名关键词优化,大连网站开发 选领超科技,上海普陀区企业网站建设观察者模式 定义 类图 应用项目:气象站 要求 实现类图 实现方式1-更新所有观察者的所有数据 搭建观察者模式框架 class Observer:"""观察者"""abstractmethoddef update(self,temp, humidity, pressure):"""由主题…

观察者模式

定义

在这里插入图片描述

类图

在这里插入图片描述

应用项目:气象站

要求

在这里插入图片描述
在这里插入图片描述

实现类图

在这里插入图片描述

实现方式1-更新所有观察者的所有数据

搭建观察者模式框架

在这里插入图片描述


class Observer:"""观察者"""@abstractmethoddef update(self,temp, humidity, pressure):"""由主题调用更新"""passclass Subject:"""主题"""@abstractmethoddef register_observer(self, observer: Observer):"""注册"""pass@abstractmethoddef remove_observer(self, observer: Observer):"""移除"""pass@abstractmethoddef notify_observers(self):"""通知所有观察者"""passclass DisplayElement:def __init__(self):pass@abstractmethoddef display(self):"""显示"""pass

实现WeatherData

在这里插入图片描述

class WeatherData(Subject):def __init__(self):self._observers: list[Observer] = []self._temp: Optional[float] = Noneself._pressure: Optional[float] = Noneself._humidity: Optional[float] = Nonedef register_observer(self, observer: Observer):self._observers.append(observer)def remove_observer(self, observer: Observer):self._observers.remove(observer)def notify_observers(self):for obs in self._observers:obs.update(self._temp, self._humidity, self._pressure)def measurements_changed(self):self.notify_observers()def set_measurements(self, temp: float, humidity: float, pressure: float):self._temp = tempself._humidity = humidityself._pressure = pressureself.measurements_changed()

实现布告板

在这里插入图片描述

class CurrentConditionsDispaly(Observer, DisplayElement):def __init__(self):self._weather_data = WeatherData()self._weather_data.register_observer(self)self._temp: Optional[float] = Noneself._pressure: Optional[float] = Noneself._humidity: Optional[float] = Nonedef update(self, temp, humidity, pressure):self._temp = tempself._humidity = humidityself._pressure = pressureself.display()def display(self):print(id(self))  # 打印当前示例id,用于区分print(f"温度:{self._temp}"f"湿度:{self._humidity}"f"气压:{self._pressure}")

测试&运行

在这里插入图片描述

if __name__ == '__main__':weather = WeatherData()display = CurrentConditionsDispaly(weather)weather.set_measurements(80, 80, 2.34)display2 = CurrentConditionsDispaly(weather)weather.set_measurements(90, 70.5, 5)

完整代码


from abc import abstractmethod
from typing import Optionalclass Observer:"""观察者"""@abstractmethoddef update(self, temp, humidity, pressure):"""由主题调用更新"""passclass Subject:"""主题"""@abstractmethoddef register_observer(self, observer: Observer):"""注册"""pass@abstractmethoddef notify_observers(self):"""通知所有观察者"""pass@abstractmethoddef remove_observer(self, observer: Observer):"""移除"""passclass DisplayElement:@abstractmethoddef display(self):"""显示"""passclass WeatherData(Subject):def __init__(self):self._observers: list[Observer] = []self._temp: Optional[float] = Noneself._pressure: Optional[float] = Noneself._humidity: Optional[float] = Nonedef register_observer(self, observer: Observer):self._observers.append(observer)def remove_observer(self, observer: Observer):self._observers.remove(observer)def notify_observers(self):for obs in self._observers:obs.update(self._temp, self._humidity, self._pressure)def measurements_changed(self):self.notify_observers()def set_measurements(self, temp: float, humidity: float, pressure: float):self._temp = tempself._humidity = humidityself._pressure = pressureself.measurements_changed()class CurrentConditionsDispaly(Observer, DisplayElement):def __init__(self, weather_data: WeatherData):self._weather_data = weather_dataself._weather_data.register_observer(self)self._temp: Optional[float] = Noneself._pressure: Optional[float] = Noneself._humidity: Optional[float] = Nonedef update(self, temp, humidity, pressure):self._temp = tempself._humidity = humidityself._pressure = pressureself.display()def display(self):print(id(self))print(f"温度:{self._temp}\n"f"湿度:{self._humidity}\n"f"气压:{self._pressure}\n")if __name__ == '__main__':weather = WeatherData()display = CurrentConditionsDispaly(weather)weather.set_measurements(80, 80, 2.34)display2 = CurrentConditionsDispaly(weather)weather.set_measurements(90, 70.5, 5)"""运行结果:
4481847152
温度:80
湿度:80
气压:2.344481847152
温度:90
湿度:70.5
气压:54481845424
温度:90
湿度:70.5
气压:5
"""

实现方式2-通知观察者自行拉取数据更新

类图

在这里插入图片描述

代码实现

在这里插入图片描述


from abc import abstractmethod, ABC
from typing import Optional, Unionclass Observer(ABC):"""观察者"""@abstractmethoddef update(self, observerable, arg):"""由主题调用更新"""passclass Observerable:"""可观察者"""_observers = []changed = Falsedef register_observer(self, observer: Observer):self._observers.append(observer)def remove_observer(self, observer: Observer):self._observers.remove(observer)def notify_observers(self, arg=None):if self.changed:for obs in self._observers:obs.update(self, arg)else:self.changed = Falsedef set_changed(self):self.changed = Trueclass DisplayElement:@abstractmethoddef display(self):"""显示"""passclass WeatherData(Observerable):_temp: float  # python新版本可不指定默认值_humidity: float_pressure: floatdef measurements_changed(self):self.set_changed()self.notify_observers()def get_temperature(self) -> float:return self._tempdef get_humility(self) -> float:return self._humiditydef get_pressure(self) -> float:return self._pressuredef set_measurements(self, temp: float, humidity: float, pressure: float):self._temp = tempself._humidity = humidityself._pressure = pressureself.measurements_changed()class CurrentConditionsDispaly(Observer, DisplayElement):_temp: float  # python新版本可不指定默认值_humidity: Optional[float]  # 值类型可以为float和None时,可以用 Optional[float] 相当于 Union[float, None]_pressure: Union[float, None]def __init__(self, observerable: Observerable):self._observerable = observerableobserverable.register_observer(self)def update(self, observerable, arg):if isinstance(observerable, WeatherData):self._temp = observerable.get_temperature()self._pressure = observerable.get_pressure()self._humidity = observerable.get_humility()self.display()def display(self):print(id(self))print(f"温度:{self._temp}\n"f"湿度:{self._humidity}\n"f"气压:{self._pressure}\n")if __name__ == '__main__':weather = WeatherData()display = CurrentConditionsDispaly(weather)weather.set_measurements(80, 80, 2.34)display2 = CurrentConditionsDispaly(weather)weather.set_measurements(90, 70.5, 5)

总结

在这里插入图片描述


文章转载自:

http://1I5l5Kfe.xbbrh.cn
http://DpRbzwr8.xbbrh.cn
http://zsuvQFSE.xbbrh.cn
http://IHrnJC9F.xbbrh.cn
http://dwKZjXE8.xbbrh.cn
http://hFySSuOw.xbbrh.cn
http://6iNj8u4u.xbbrh.cn
http://Uwphuvbt.xbbrh.cn
http://uH15xC1x.xbbrh.cn
http://D49qY5IL.xbbrh.cn
http://M8M5UqmR.xbbrh.cn
http://nI0Jvz3z.xbbrh.cn
http://W8XeFzNX.xbbrh.cn
http://Ov75JigX.xbbrh.cn
http://ILUheuKy.xbbrh.cn
http://9jFPTyAy.xbbrh.cn
http://bHYWHIud.xbbrh.cn
http://GZpRNAUT.xbbrh.cn
http://80m584Z0.xbbrh.cn
http://qpld3Nwa.xbbrh.cn
http://Mos0zXuM.xbbrh.cn
http://ZEwq1cbu.xbbrh.cn
http://ef8KmQKT.xbbrh.cn
http://jVM8dbRu.xbbrh.cn
http://B3G0LVNI.xbbrh.cn
http://HfVWlyFD.xbbrh.cn
http://4RE1ENbO.xbbrh.cn
http://73gteHkN.xbbrh.cn
http://ZoiqSHx4.xbbrh.cn
http://cHrkAUlw.xbbrh.cn
http://www.dtcms.com/wzjs/641024.html

相关文章:

  • 贵州省建设厅网站多少视频拍摄策划方案
  • 科技网站设计公司学管理培训班去哪里学
  • 做资讯网站需要什么资质品质好的深圳装修
  • 想自己做一个网站应该怎么弄施工企业合规管理检查制度
  • 什么是网站后台建设做网站找浩森宇特
  • 网站建设必须要服务器么有哪些网站是用php做的
  • 网站一般用什么语言写河南网站建设官网
  • 芜湖市网站开发网站建设与管理ppt课件百度云盘
  • 怎么做cpa网站广告牌设计模板图片
  • 企业网站模板 asppc端网站优缺点
  • 荆州市建设厅网站公司注册代理注册
  • 网页模板网站 优帮云做网站的伪原创怎么弄
  • 豫建设标去哪个网站郓城做网站网络公司
  • 什么是网页什么是网站网站开发质保金
  • 网站安全建设总结报告做娱乐网站被坑
  • 成都的网站建设午夜资源站
  • 贵州省交通建设工程质量监督局网站功能性的网站
  • 网站建设制作公司都选万维科技漳州正规网站建设价格
  • 广告联盟怎么建设网站工商注册企业名称查询
  • 网站设计创新点怎么写第二章营销型网站建设测验
  • 网站搭建好了不用会不会被攻击建站模板wordpress
  • 商城开发网站开发东城免费做网站
  • 网站开发+搜索wordpress主题 双站点
  • 陕西省城乡住房和建设厅网站有什网站可以做设计赚钱
  • 集团企业网站模板定制虚拟偶像app
  • 笔记本怎么建设网站网站服务器ip更换
  • 设计网站的管理系统深圳品牌蛋糕店有哪些品牌排行
  • 水果商城网站制作多少钱ui私活20个页面以上多少钱
  • 做矢量图的网站wordpress底部代码
  • 素马网站设计公司贵州城乡建设厅官网