观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
当两个对象之间松耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计让主题和观察者之间松耦合。
我们来看看一种push方式的 观察者模式。
首先是观察者 主题 等的接口。
//主题 public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers(); } //观察者 public interface Observer { public void update(float temp, float humidity, float pressure); } //other 操作 public interface DisplayElement { public void display(); }
实现这些接口。
//实现主题 public class WeatherData implements Subject{ private ArrayList observers; private float temperature; private float humidity; private float pressure; public WeatherData() { observers = new ArrayList(); } public void notifyObservers() { // TODO Auto-generated method stub for(int i=0, len=observers.size(); i < len; i++) { Observer observer = (Observer) observers.get(i); observer.update(temperature, humidity, pressure ); } } public void registerObserver(Observer o) { // TODO Auto-generated method stub observers.add(o); } public void removeObserver(Observer o) { // TODO Auto-generated method stub int i = observers.indexOf(o); if(i >= 0) { observers.remove(i); } } public void measurementsChange() { notifyObservers(); } public void setMeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementsChange(); } } //实现观察者 public class CurrentConditionsDisplay implements Observer, DisplayElement{ private float temperature; private float humidity; private Subject weatherData; public CurrentConditionsDisplay(Subject weatherData) { this.weatherData = weatherData; weatherData.registerObserver(this); } public void update(float temp, float humidity, float pressure) { // TODO Auto-generated method stub this.temperature = temp; this.humidity = humidity; display(); } public void display() { // TODO Auto-generated method stub System.out.println("Current conditions: "+ temperature + "F degrees and " + humidity + "% humidity"); } }
实现完了这些接口,测试观察者模式
public class WeatherStation { public static void main(String[] args) { WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay display = new CurrentConditionsDisplay(weatherData); weatherData.setMeasurements(80, 65, 30.4f); weatherData.setMeasurements(82, 76, 30.2f); weatherData.setMeasurements(78, 90, 29.4f); } }
您还没有登录,请您登录后再发表评论
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统,...
Java的事件模式是编程中的一种设计模式,尤其在构建响应用户输入或系统状态改变的应用时至关重要。事件模式在Java中通常分为两类:直接驱动模式和监控式事件模式。 1. **事件直接驱动模式** 在这种模式下,事件...
在本文中,我们将深入探讨“观察者模式”(Observer Pattern),这是设计模式中的一种行为模式,用于处理对象间的一对多依赖关系。 观察者模式的主要意图是定义一种对象间的一对多依赖关系,当一个对象的状态发生...
8. **设计模式**:为了提高代码的可读性和可维护性,开发者可能在项目中应用了设计模式,如单例模式(用于控制类的实例化)、工厂模式(用于对象的创建)或观察者模式(用于实现事件驱动)。 9. **测试与调试**:...
9. **设计模式**:设计模式是解决常见编程问题的经验总结,如单例模式、工厂模式和观察者模式。理解并运用这些模式能提高代码的可读性和可维护性。 10. **文档编写**:毕业设计通常需要撰写详细的项目报告,包括...
9. **设计模式**:在大作业中,合理应用单例模式、工厂模式、观察者模式等设计模式,可以提高代码的可读性和可维护性。 10. **Maven或Gradle构建工具**:`Java_Design-master`可能是一个使用Maven或Gradle管理的...
你可以介绍单例模式、工厂模式、观察者模式、装饰器模式等经典模式,并结合实际案例来展示它们在Java中的应用。同时,理解设计模式背后的意图和原则,如开闭原则、依赖倒置原则,对于提升编程素养至关重要。 MySQL...
标题“archlinux.java-design-patterns-git”暗示了这个压缩包可能包含了在Arch Linux操作系统上关于Java设计模式和Git版本控制的资源。描述同样简洁,没有提供额外信息,但我们可以根据标签“Shell”推测,其中可能...
9. **设计模式**:为了保证代码的可维护性和扩展性,开发者通常会遵循一些设计模式,如单例模式、工厂模式、观察者模式等。 10. **日志与调试**:项目中可能使用了如Log4j或SLF4J的日志框架,以及断点调试工具,...
9. **设计模式**:如单例模式、工厂模式、观察者模式等,它们是解决常见问题的标准化解决方案,可以提高代码的复用性和可读性。 10. **文档编写**:良好的项目文档包括需求文档、设计文档、API文档等,可以帮助团队...
- **设计模式**:可能包含单例、工厂、观察者等常见的设计模式实现。 - **单元测试**:通过测试用例了解如何验证代码的正确性。 - **版本控制**:了解Git的基本操作,如commit、push、pull等。 此外,如果项目包含...
在本项目中,作者使用了docsify框架来创建一个个人学习主站,旨在记录和分享其在多个IT领域的学习笔记,主要包括Java多线程、设计模式、MySQL数据库以及Git版本控制等方面的知识。以下是对这些主题的详细阐述: 1. ...
此外,深入理解设计模式,如工厂模式、单例模式、观察者模式等,对于提高代码质量和可维护性至关重要。 四、数据库操作 多数Java项目都会涉及到数据库的使用,如MySQL、Oracle或MongoDB等。因此,熟悉SQL语言、理解...
- **观察者模式**:事件监听和发布订阅模型。 8. **数据库基础** - SQL语言:增删改查操作,JOIN,子查询,索引概念。 - JDBC API:连接数据库,执行SQL,处理结果集。 以上就是Java实习生面试准备的一些核心...
- 项目可能运用了一些设计模式,如单例模式、工厂模式、观察者模式等,这些设计模式能提高代码的可维护性和可扩展性。 总体来说,这个项目涵盖了Java基础、Android开发、数据库操作、网络通信等多个方面,是一个很...
8. **设计模式**:可能用到单例模式(如创建数据库连接)、观察者模式(用于更新UI上的日程信息)或其他适合的面向对象设计模式。 9. **国际化与本地化**:如果程序考虑了不同地区用户的使用,可能涉及到资源文件的...
- 常见设计模式:学习单例、工厂、观察者、装饰器、适配器等经典设计模式,提升代码复用性和可维护性。 9. **Java标准库** - 核心API:熟悉并熟练运用Java.util、Java.lang等核心包中的类和接口。 - 日志框架:...
这份手册是Java开发者的重要参考资料,它涵盖了编程规约、异常处理、并发控制、设计模式等多个方面的内容。下面将详细解析其中的关键知识点。 一、编程规约 1. 命名规约:包括类名、方法名、变量名等应遵循的命名...
相关推荐
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统,...
Java的事件模式是编程中的一种设计模式,尤其在构建响应用户输入或系统状态改变的应用时至关重要。事件模式在Java中通常分为两类:直接驱动模式和监控式事件模式。 1. **事件直接驱动模式** 在这种模式下,事件...
在本文中,我们将深入探讨“观察者模式”(Observer Pattern),这是设计模式中的一种行为模式,用于处理对象间的一对多依赖关系。 观察者模式的主要意图是定义一种对象间的一对多依赖关系,当一个对象的状态发生...
8. **设计模式**:为了提高代码的可读性和可维护性,开发者可能在项目中应用了设计模式,如单例模式(用于控制类的实例化)、工厂模式(用于对象的创建)或观察者模式(用于实现事件驱动)。 9. **测试与调试**:...
9. **设计模式**:设计模式是解决常见编程问题的经验总结,如单例模式、工厂模式和观察者模式。理解并运用这些模式能提高代码的可读性和可维护性。 10. **文档编写**:毕业设计通常需要撰写详细的项目报告,包括...
9. **设计模式**:在大作业中,合理应用单例模式、工厂模式、观察者模式等设计模式,可以提高代码的可读性和可维护性。 10. **Maven或Gradle构建工具**:`Java_Design-master`可能是一个使用Maven或Gradle管理的...
你可以介绍单例模式、工厂模式、观察者模式、装饰器模式等经典模式,并结合实际案例来展示它们在Java中的应用。同时,理解设计模式背后的意图和原则,如开闭原则、依赖倒置原则,对于提升编程素养至关重要。 MySQL...
标题“archlinux.java-design-patterns-git”暗示了这个压缩包可能包含了在Arch Linux操作系统上关于Java设计模式和Git版本控制的资源。描述同样简洁,没有提供额外信息,但我们可以根据标签“Shell”推测,其中可能...
9. **设计模式**:为了保证代码的可维护性和扩展性,开发者通常会遵循一些设计模式,如单例模式、工厂模式、观察者模式等。 10. **日志与调试**:项目中可能使用了如Log4j或SLF4J的日志框架,以及断点调试工具,...
9. **设计模式**:如单例模式、工厂模式、观察者模式等,它们是解决常见问题的标准化解决方案,可以提高代码的复用性和可读性。 10. **文档编写**:良好的项目文档包括需求文档、设计文档、API文档等,可以帮助团队...
- **设计模式**:可能包含单例、工厂、观察者等常见的设计模式实现。 - **单元测试**:通过测试用例了解如何验证代码的正确性。 - **版本控制**:了解Git的基本操作,如commit、push、pull等。 此外,如果项目包含...
在本项目中,作者使用了docsify框架来创建一个个人学习主站,旨在记录和分享其在多个IT领域的学习笔记,主要包括Java多线程、设计模式、MySQL数据库以及Git版本控制等方面的知识。以下是对这些主题的详细阐述: 1. ...
此外,深入理解设计模式,如工厂模式、单例模式、观察者模式等,对于提高代码质量和可维护性至关重要。 四、数据库操作 多数Java项目都会涉及到数据库的使用,如MySQL、Oracle或MongoDB等。因此,熟悉SQL语言、理解...
- **观察者模式**:事件监听和发布订阅模型。 8. **数据库基础** - SQL语言:增删改查操作,JOIN,子查询,索引概念。 - JDBC API:连接数据库,执行SQL,处理结果集。 以上就是Java实习生面试准备的一些核心...
- 项目可能运用了一些设计模式,如单例模式、工厂模式、观察者模式等,这些设计模式能提高代码的可维护性和可扩展性。 总体来说,这个项目涵盖了Java基础、Android开发、数据库操作、网络通信等多个方面,是一个很...
8. **设计模式**:可能用到单例模式(如创建数据库连接)、观察者模式(用于更新UI上的日程信息)或其他适合的面向对象设计模式。 9. **国际化与本地化**:如果程序考虑了不同地区用户的使用,可能涉及到资源文件的...
- 常见设计模式:学习单例、工厂、观察者、装饰器、适配器等经典设计模式,提升代码复用性和可维护性。 9. **Java标准库** - 核心API:熟悉并熟练运用Java.util、Java.lang等核心包中的类和接口。 - 日志框架:...
这份手册是Java开发者的重要参考资料,它涵盖了编程规约、异常处理、并发控制、设计模式等多个方面的内容。下面将详细解析其中的关键知识点。 一、编程规约 1. 命名规约:包括类名、方法名、变量名等应遵循的命名...