Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

观察者模式(Observer)- 气象站

模式原理

意图

define对象间的一种一对多依赖关系,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新。

适用场景

  • 当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象有待改变时
  • 当一个对象必须通知其他对象,但它又不能假定其他对象是谁时

关键参与者

  • Subject(主题):知道它的观察者,可以有任意多个观察者观察同一个主题;提供注册和删除观察者对象的接口
  • Observer(观察者):为那些在主题发生改变时需要获得通知的对象定义一个更新接口
  • ConcreteSubject(具体主题):将有关状态存入各ConcreteObserver对象;当它的状态发生改变时,向它的各个观察者发出通知
  • ConcreteObserver(具体观察者):维护一个指向ConcreteSubject对象的引用;存储有关状态,这些状态应与主题的状态保持一致;实现Observer的更新接口以使自身状态与主题的状态保持一致

示例故事

本示例采用经典的"气象站"场景:

  • 气象数据中心(WeatherData)作为Subject,负责收集温度、湿度、气压等数据
  • 多个布告板(CurrentConditionsDisplay、StatisticsDisplay)作为Observer,自动接收气象数据更新并显示

对应关系:

  • Subject 接口 → 主题契约
  • WeatherData → 具体主题(气象数据中心)
  • Observer 接口 → 观察者契约
  • CurrentConditionsDisplay → 具体观察者(当前状况布告板)
  • StatisticsDisplay → 具体观察者(统计布告板)

运行说明

环境要求

  • Python 3.10+

运行方式

python weather_station.py

预期输出

当前状况:80.0°F,湿度 65.0%
统计:平均/最大/最小 = 80.0/80.0/80.0
当前状况:82.0°F,湿度 70.0%
统计:平均/最大/最小 = 81.0/82.0/80.0
当前状况:78.0°F,湿度 90.0%
统计:平均/最大/最小 = 80.0/82.0/78.0

运行截图

运行截图

About

Observer Design Pattern - Weather Station Example (Python)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages