观察者模式

观察者模式

观察者模式可以实现松耦合,使得主题和观察者之间的关系更加灵活。它可以方便地添加新的观察者,以及在运行时动态地增加、删除或修改观察者。同时,观察者模式符合开闭原则,使得主题和观察者可以独立变化,而不会相互影响。

下面是一个简单的观察者模式示例,假设有一个天气监测系统,主题是天气数据,观察者是不同的显示设备,它们实时显示天气数据的变化:

// 主题 - 天气数据

interface WeatherData {

void registerObserver(WeatherObserver observer);

void removeObserver(WeatherObserver observer);

void notifyObservers();

}

// 观察者 - 显示设备

interface WeatherObserver {

void update(float temperature, float humidity, float pressure);

}

// 具体主题 - 天气数据

class WeatherStation implements WeatherData {

private List observers;

private float temperature;

private float humidity;

private float pressure;

public WeatherStation() {

this.observers = new ArrayList<>();

}

public void registerObserver(WeatherObserver observer) {

observers.add(observer);

}

public void removeObserver(WeatherObserver observer) {

observers.remove(observer);

}

public void notifyObservers() {

for (WeatherObserver observer : observers) {

observer.update(temperature, humidity, pressure);

}

}

public void setMeasurements(float temperature, float humidity, float pressure) {

this.temperature = temperature;

this.humidity = humidity;

this.pressure = pressure;

notifyObservers();

}

}

// 具体观察者 - 显示设备

class DisplayDevice implements WeatherObserver {

private String name;

public DisplayDevice(String name) {

this.name = name;

}

public void update(float temperature, float humidity, float pressure) {

System.out.println(name + " - Temperature: " + temperature +

" Humidity: " + humidity + " Pressure: " + pressure);

}

}

// 客户端代码

public class Main {

public static void main(String[] args) {

WeatherStation weatherStation = new WeatherStation();

DisplayDevice display1 = new DisplayDevice("Display 1");

DisplayDevice display2 = new DisplayDevice("Display 2");

weatherStation.registerObserver(display1);

weatherStation.registerObserver(display2);

weatherStation.setMeasurements(25.5f, 65.2f, 1013.2f);

// Output:

// Display 1 - Temperature: 25.5 Humidity: 65.2 Pressure: 1013.2

// Display 2 - Temperature: 25.5 Humidity: 65.2 Pressure: 1013.2

weatherStation.removeObserver(display2);

weatherStation.setMeasurements(27.8f, 62.8f, 1010.5f);

// Output:

// Display 1 - Temperature: 27.8 Humidity: 62.8 Pressure: 1010.5

}

}

在上面的示例中,我们定义了主题接口 WeatherData 和观察者接口 WeatherObserver,具体主题类 WeatherStation 和具体观察者类 DisplayDevice。通过注册观察者、更新状态和通知观察者的过程,实现了主题和观察者之间的交互。

RUNOOB RUNOOB

429***967@qq.com

2年前 (2023-07-11)

上一篇: 【初中语文】部编版八年级下册第3课《安塞腰鼓》原文
下一篇: 冷藏柜怎么调温度0

相关文章

一个美国人用三年拍了《涂鸦北京》,只有很少中国人看到
哪个买房软件比较好
商洛论坛
铛铛科技是什么?
浪漫满屋
正在阅读:电脑端的UC浏览器和360浏览器哪个好?电脑端的UC浏览器和360浏览器哪个好?