设计模式-观察者模式(三)

2023-05-04 16:00:29 浏览数 (1)

最后,我们可以编写一个简单的测试程序来演示观察者模式:

代码语言:javascript复制
public class WeatherStation {
    public static void main(String[] args) {
        ConcreteSubject weatherData = new ConcreteSubject();
        ConcreteObserver currentConditionsDisplay = new ConcreteObserver();

        weatherData.registerObserver(currentConditionsDisplay);
        weatherData.setMeasurements(80, 65, 30.4f);
        weatherData.setMeasurements(82, 70, 29.2f);
        weatherData.setMeasurements(78, 90, 29.2f);
    }
}

运行测试程序后,可以看到如下输出:

代码语言:javascript复制
Current conditions: 80.0F degrees and 65.0% humidity and 30.4Pa
Current conditions: 82.0F degrees and 70.0% humidity and 29.2Pa
Current conditions: 78.0F degrees and 90.0% humidity and 29.2Pa

这表明当气象数据发生变化时,观察者会自动收到通知并更新自己的状态。

观察者模式的优缺点

观察者模式的优点在于它可以实现对象之间的松耦合,主题对象和观察者对象之间的耦合度较低,可以相互独立地变化。这使得我们可以更加灵活地添加或删除观察者对象,也可以在不影响主题对象的情况下添加新的观察者对象。

另外,观察者模式还可以支持广播通信,当一个主题对象发生变化时,它的所有观察者对象都会收到通知,并且可以自动更新自己的状态。这种广播通信模式可以减少对象之间的相互依赖,从而使代码更加清晰、简洁。

观察者模式的缺点在于,如果观察者对象太多,会导致主题对象通知所有观察者对象的时间变长,从而影响程序的性能。另外,如果观察者对象之间有循环依赖的情况,可能会导致死循环,从而使程序崩溃。

0 人点赞