给出一个观察者模式的实例和他的UML类图
时间: 2023-11-29 07:02:18 浏览: 53
下面是一个观察者模式的实例:
假设我们有一个气象站,气象站通过传感器测量温度、湿度和气压等数据。我们需要开发一个天气预报应用程序,在气象站更新数据时实时更新天气预报数据。这个问题可以使用观察者模式来解决。
UML 类图:
```
+------------------+ +------------------+
| Subject |<>-----------| Observer |
+------------------+ +------------------+
| + registerObserver(o: Observer): void |
| + removeObserver(o: Observer): void |
| + notifyObservers(): void |
+------------------+ +------------------+
^ ^
| |
+------------------+ +------------------+
| WeatherData | | ForecastData |
+------------------+ +------------------+
| - temperature | | - temperature |
| - humidity | | - humidity |
| - pressure | | - pressure |
+------------------+ +------------------+
| + getTemperature(): float |
| + getHumidity(): float |
| + getPressure(): float |
| + measurementsChanged(): void |
+------------------+ +------------------+
```
在上面的 UML 类图中,有两个主要的角色:
1. Subject:主题,它包含一个观察者列表并提供注册和删除观察者的方法,以及通知观察者的方法。
2. Observer:观察者,它定义了一个更新方法,当主题状态改变时被调用。
在这个例子中,WeatherData 是主题,它实现 Subject 接口并包含一个观察者列表。当 WeatherData 对象的状态改变时,它会调用 notifyObservers() 方法通知所有注册的观察者。ForecastData 是观察者,它实现 Observer 接口并包含一个更新方法,当 WeatherData 对象的状态改变时,它会被调用。