一、什么情况下考虑使用“观察者设计模式”?
观察者设计模式定义了对象之间的一对多的依赖关系,当主题对象改变状态时,它的所有观察者都会收到通知并且自动更新。
来具体分析一下下面的一个应用场景:
WeatherData为一个气象站提供的气象信息的实体类,当WeatherData中的信息发生变化时,需要让两个显示面板(CurrentConditionsDisplay和AnotherCondisDisplay)中相应的信息发生改变。这里我们就可以使用观察者设计模式。
观察者模式中的两个概念:
①主题(subject),一对多关系中的“一”端,也可以称为可观察对象。这里为WeatherData
②观察者(observer),一对多关系中的“多”端。这里为各种Display。
我们所要实现的功能就是当主题中的信息发生改变时可以通知所有的观察者,并让观察者做出相应的反应。
二、如何实现观察者模式?
①首先主题作为“一”端能够通知观察者的“多”端,所以主题中应当具有可以新增、删除观察者和通知观察者方法,所以就可以定义一个主题接口Subject如下:
public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(); }
②观察者作为“多”端,虽然各不相同,但是必须遵循一定的规则,主题才能使用面向接口的编程方法,来实现统一的调用,所以我们为观察定义了统一的改变数据的方法update(),如下:
public interface Observer { void update(double temperature, double humidity, double pressure); }
观察者如果需要遵循统一的展示接口,这里可以根据实际需要,自己来进行定义,我们定义了DisplayElement接口
public interface DisplayElement { public void display(); }
③在定义了上面的接口之后,主题中需要存储所有观察者的列表信息,并且能够根据观察者,进行自动的新建或者删除,所以我们可以在观察者的构造方法中调用主题的新增观察者方法,实现观察的新增如下:
public class CurrentConditionsDisplay implements Observer, DisplayElement{ private double temperature; private double humidity; private Subject weatherData; public CurrentConditionsDisplay(Subject weatherData){ this.weatherData=weatherData; weatherData.registerObserver(this); } @Override public void display() { System.out.println("temperature: " + temperature); System.out.println("humidity:" + humidity); } @Override public void update(double temperature, double humidity, double pressure) { this.temperature=temperature; this.humidity=humidity; display(); } }
然后当主题的数据发生改变时可以循环调用观察者中的update()方法,实现联动。
java中也有内置的观察者模式,分别为:java.util.Observer和java.util.Observerable,只是Observer为接口,Observerable为主题的实现类,使用起来也比较的方便。
相关推荐
首先,我们来看"Java设计模式——观察者模式的两种情况": 1. **主动通知**: 在这种情况下,被观察者对象在自身状态发生变化时,会主动调用`Observable`接口提供的`notifyObservers()`方法,将变化通知给所有注册的...
在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
《Java与模式——源码》这个主题涉及到的是Java编程语言中的设计模式应用,以及如何通过源代码来理解和学习这些模式。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更易读、易维护、...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...
在本文中,我们将深入探讨设计模式中的一个经典案例——观察者模式(Observer Pattern),通过具体的实现来理解其工作原理。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生...
本文将深入探讨其中的一种——观察者模式(Observer Pattern)。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ### ...
《设计模式——观察者》 在软件工程中,设计模式是一种在特定情境下解决常见问题的经验总结,它们是经过反复验证的最佳实践。观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖...
本文将深入探讨其中的一种——观察者模式(Observer Pattern),它是行为设计模式的一种,主要用来封装行为的变化,实现对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被...
在这个程序示例中,结合了事件风格和观察者模式,这两种设计模式在软件工程中都扮演着重要的角色。 **事件风格编程** 是一种编程范式,它将程序设计为对特定事件的响应。在事件驱动的系统中,程序的执行不依赖于...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...
### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可复用性。在这个压缩包文件“DesignPatterns”中,很可能包含了各种Java设计模式的源代码实现。...
22.4.1 Java世界中的观察者模式 22.4.2 项目中真实观察者模式 22.4.3 订阅发布模型 22.5 最佳实践 第23章 门面模式 23.1 我要投递信件 23.2 门面模式的定义 23.3 门面模式的应用 23.3.1 门面模式的优点 23.3.2 门面...