观察者模式代码
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,观察者模式被内建在语言特性中,通过`java.util.Observable`和`java.util.Observer`接口来实现。 我们要理解观察者模式的基本概念。在观察者模式中,有一个被观察的对象,也称为主题(Subject),它可以是任何类型的对象,只要它有状态变化。主题持有一组观察者,当主题状态改变时,会通知这些观察者。观察者则负责响应主题的状态变化,执行相应的操作。 在Java中,`Observable`类代表被观察的对象,它提供了添加、删除观察者以及通知所有观察者的方法。而`Observer`接口定义了观察者的行为,通常需要实现`update`方法,该方法会在主题状态改变时被调用。 下面是一个简单的Java观察者模式的实现示例: ```java import java.util.Observable; import java.util.Observer; class WeatherData implements Observable { private float temperature; private float humidity; private float pressure; public void measurementsChanged() { setChanged(); notifyObservers(); } // 设置温度 public void setMeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); } } interface DisplayElement { void display(); } class CurrentConditionsDisplay implements Observer, DisplayElement { private float temperature; private float humidity; public void update(Observable o, Object arg) { if (o instanceof WeatherData) { WeatherData weatherData = (WeatherData) o; this.temperature = weatherData.getTemperature(); this.humidity = weatherData.getHumidity(); display(); } } @Override public void display() { System.out.println("当前温度: " + temperature + ", 湿度: " + humidity); } } public class Main { public static void main(String[] args) { WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(); weatherData.addObserver(currentDisplay); weatherData.setMeasurements(32, 65, 30.4f); } } ``` 在这个例子中,`WeatherData`是被观察的主题,它包含了一些天气测量数据。`CurrentConditionsDisplay`是观察者,实现了`Observer`接口,并且当`WeatherData`的数据改变时,会更新并显示新的天气状况。 这个压缩包文件"InternetWeather"可能包含了类似上述的实例,展示了如何将观察者模式应用于网络获取的天气数据。通过这种模式,当网络获取的天气数据发生变化时,相关的显示组件可以自动更新,无需手动触发。 观察者模式在许多场景下非常有用,比如事件驱动编程、用户界面的实时更新等。它的主要优点是可以使系统模块化,提高代码的可复用性和可扩展性。然而,如果观察者数量过多或者通知过程复杂,可能会导致性能问题,因此在实际应用中需要权衡利弊。
- 1
- 粉丝: 1w+
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- apache-maven-3.6.1-bin.zip
- c593f5fc-d4a7-4b43-8ab2-51afc90f3f62
- IIR滤波器参数计算函数
- WPF树菜单拖拽功能,下级目录拖到上级目录,上级目录拖到下级目录.zip
- CDH6.3.2版本hive2.1.1修复HIVE-14706后的jar包
- 鸿蒙项目实战-天气项目(当前城市天气、温度、湿度,24h天气,未来七天天气预报,生活指数,城市选择等)
- Linux环境下oracle数据库服务器配置中文最新版本
- Linux操作系统中Oracle11g数据库安装步骤详细图解中文最新版本
- SMA中心接触件插合力量(插入力及分离力)仿真
- 变色龙记事本,有NPP功能,JSONview功能