观察者模式
观察者模式(Observer Pattern)在Java中的使用非常广泛,下面举一个简单的案例来说明如何使用观察者模式:
假设有一个天气监测站,该监测站可以实时获取当前的天气信息,并通知多个订阅者(观察者)。当天气信息发生变化时,订阅者将自动收到更新的通知。
首先,我们需要定义两个接口:Subject(主题)和Observer(观察者)。
// 主题接口
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
// 观察者接口
public interface Observer {
void update(String weather);
}
然后,我们实现这两个接口:
import java.util.ArrayList;
import java.util.List;
// 天气监测站作为主题
public class WeatherStation implements Subject {
private List<Observer> observers;
private String weather;
public WeatherStation() {
this.observers = new ArrayList<>();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(weather);
}
}
// 当天气信息更新时调用该方法
public void setWeather(String weather) {
this.weather = weather;
notifyObservers();
}
}
// 订阅者作为观察者
public class Subscriber implements Observer {
private String name;
public Subscriber(String name) {
this.name = name;
}
@Override
public void update(String weather) {
System.out.println(name + " 收到天气更新:" + weather);
}
}
最后,我们可以测试一下:
public class Main {
public static void main(String[] args) {
WeatherStation station = new WeatherStation();
// 创建两个订阅者
Observer subscriber1 = new Subscriber("Subscriber 1");
Observer subscriber2 = new Subscriber("Subscriber 2");
// 注册订阅者
station.registerObserver(subscriber1);
station.registerObserver(subscriber2);
// 模拟天气更新
station.setWeather("晴天");
station.setWeather("多云");
station.setWeather("雨天");
// 订阅者会自动收到天气更新的通知并进行相应的处理
}
}
以上代码实现了一个简单的观察者模式。当天气监测站的天气信息发生变化时,订阅者将收到相应的更新通知。观察者模式使得主题(天气监测站)和订阅者(观察者)之间解耦,方便扩展和维护。
本文来自博客园,作者:博客-涛,转载请注明原文链接:https://www.cnblogs.com/htmsmile/p/17621974.html