java 观察者模式
时间: 2024-01-21 16:14:58 浏览: 27
观察者模式是一种行为型设计模式,它允许对象之间建立一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在Java中,观察者模式通常由一个抽象被观察者接口和一个抽象观察者接口组成。
以下是Java观察者模式的示例代码:
1. 定义抽象被观察者接口Subject:
```java
public interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
```
2. 定义抽象观察者接口Observer:
```java
public interface Observer {
void update(float temperature, float pressure, float humidity);
}
```
3. 创建具体被观察者类WeatherData,实现Subject接口:
```java
public class WeatherData implements Subject {
private List<Observer> observers;
private float temperature;
private float pressure;
private float humidity;
public WeatherData() {
observers = new ArrayList<>();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(temperature, pressure, humidity);
}
}
public void setMeasurements(float temperature, float pressure, float humidity) {
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
notifyObservers();
}
}
```
4. 创建具体观察者类CurrentConditionsDisplay,实现Observer接口:
```java
public class CurrentConditionsDisplay implements Observer {
private float temperature;
private float pressure;
private float humidity;
@Override
public void update(float temperature, float pressure, float humidity) {
this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
display();
}
public void display() {
System.out.println("Current conditions: " + temperature + "F degrees, " + pressure + " pressure, " + humidity + "% humidity");
}
}
```
5. 在主程序中使用观察者模式:
```java
public class Main {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay();
weatherData.registerObserver(currentDisplay);
weatherData.setMeasurements(80, 29.2f, 65);
}
}
```
运行以上代码,输出结果为:
```
Current conditions: 80.0F degrees, 29.2 pressure, 65.0% humidity
```