当前位置:实例文章 » HTML/CSS实例» [文章]设计模式 ~ 观察者模式

设计模式 ~ 观察者模式

发布人: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. **可能引起循环依赖**: 如果两个或多个被观察者之间存在循环依赖关系,这将导致系统出现问题。

**总结**

观察者模式是一种常见的设计模式,它允许一个被观察者与多个其他对象建立一种松散耦合的关系。这种模式使得被观察者可以通知观察者们关于其状态变化,而不需要这些观察者们直接访问被观察者的内部实现。虽然观察者模式有其优点和缺点,但它仍然是软件开发中一个非常有用的工具。

其他信息

其他资源

Top