设计模式 ~ 观察者模式
发布人:shili8
发布时间:2025-01-10 08:28
阅读次数:0
**观察者模式(Observer Pattern)**
在软件开发中,观察者模式是一种常见的设计模式,它允许一个对象(被观察者)与多个其他对象(观察者)建立一种松散耦合的关系。这种模式使得被观察者可以通知观察者们关于其状态变化,而不需要这些观察者们直接访问被观察者的内部实现。
**问题背景**
在现实世界中,我们经常会遇到这样的场景:一个系统或对象需要向多个其他系统或对象传递信息,例如股票价格、天气预报等。这种情况下,如果每个系统或对象都需要直接访问另一个系统或对象的内部实现,这将导致系统之间的紧密耦合,从而使得系统变得难以维护和扩展。
**观察者模式定义**
观察者模式是一种行为设计模式,它定义了一个一对多的关系,其中一个被观察者对象(Subject)可以与多个观察者对象(Observer)建立联系。被观察者对象可以向观察者对象传递信息,而不需要这些观察者对象直接访问被观察者的内部实现。
**观察者模式角色**
1. **被观察者(Subject)**: 这是核心对象,它维护一个用于存储观察者对象的列表。当被观察者状态变化时,它会通知所有注册在其上的观察者。
2. **观察者(Observer)**: 这是一个接口或抽象类,定义了一个方法,该方法将被被观察者调用以通知观察者关于其状态变化。
**观察者模式实现**
下面是使用 Java语言实现的观察者模式示例:
java// 被观察者(Subject)
public class WeatherStation {
private List observers;
public WeatherStation() {
this.observers = new ArrayList<>();
}
// 注册观察者 public void registerObserver(Observer observer) {
observers.add(observer);
}
// 移除观察者 public void removeObserver(Observer observer) {
observers.remove(observer);
}
// 通知所有注册的观察者 protected void notifyObservers() {
for (Observer observer : observers) {
observer.update(this);
}
}
// 获取当前温度 public int getTemperature() {
return temperature;
}
private int temperature =0;
public void setTemperature(int temperature) {
this.temperature = temperature;
notifyObservers();
}
}
// 观察者(Observer)
public interface Observer {
void update(WeatherStation weatherStation);
}
// 具体的观察者public class ForecastDisplay implements Observer {
@Override public void update(WeatherStation weatherStation) {
int temperature = weatherStation.getTemperature();
System.out.println("Forecast: Temperature is " + temperature + " degrees.");
}
}
// 具体的观察者public class StatisticsDisplay implements Observer {
@Override public void update(WeatherStation weatherStation) {
int temperature = weatherStation.getTemperature();
System.out.println("Statistics: Temperature is " + temperature + " degrees.");
}
}
在这个示例中,`WeatherStation`类是被观察者,它维护一个用于存储观察者对象的列表。`ForecastDisplay`和`StatisticsDisplay`类分别是具体的观察者,它们实现了`Observer`接口,并且可以接收来自`WeatherStation`类的通知。
**优点**
1. **松散耦合**: 观察者模式使得被观察者与观察者之间建立一种松散耦合的关系,这有利于系统的扩展和维护。
2. **高灵活性**: 观察者模式允许一个被观察者与多个观察者建立联系,从而提高了系统的灵活性。
**缺点**
1. **增加复杂度**: 观察者模式会增加系统的复杂度,因为需要维护一个用于存储观察者对象的列表。
2. **可能引起循环依赖**: 如果两个或多个被观察者之间存在循环依赖关系,这将导致系统出现问题。
**总结**
观察者模式是一种常见的设计模式,它允许一个被观察者与多个其他对象建立一种松散耦合的关系。这种模式使得被观察者可以通知观察者们关于其状态变化,而不需要这些观察者们直接访问被观察者的内部实现。虽然观察者模式有其优点和缺点,但它仍然是软件开发中一个非常有用的工具。

