当前位置:网站首页 > Java教程 > 正文

观察者模式教程java



观察者模式可以实现松耦合,使得主题和观察者之间的关系更加灵活。它可以方便地添加新的观察者,以及在运行时动态地增加、删除或修改观察者。同时,观察者模式符合开闭原则,使得主题和观察者可以独立变化,而不会相互影响。

下面是一个简单的观察者模式示例,假设有一个天气监测系统,主题是天气数据,观察者是不同的显示设备,它们实时显示天气数据的变化:

// 主题 - 天气数据 interface WeatherData { void registerObserver(WeatherObserver observer); void removeObserver(WeatherObserver observer); void notifyObservers(); } // 观察者 - 显示设备 interface WeatherObserver { void update(float temperature, float humidity, float pressure); } // 具体主题 - 天气数据 class WeatherStation implements WeatherData { private List<WeatherObserver> observers; private float temperature; private float humidity; private float pressure; public WeatherStation() { this.observers = new ArrayList<>(); } public void registerObserver(WeatherObserver observer) { observers.add(observer); } public void removeObserver(WeatherObserver observer) { observers.remove(observer); } public void notifyObservers() { for (WeatherObserver observer : observers) { observer.update(temperature, humidity, pressure); } } public void setMeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; notifyObservers(); } } // 具体观察者 - 显示设备 class DisplayDevice implements WeatherObserver { private String name; public DisplayDevice(String name) { this.name = name; } public void update(float temperature, float humidity, float pressure) { System.out.println(name + " - Temperature: " + temperature + " Humidity: " + humidity + " Pressure: " + pressure); } } // 客户端代码 public class Main { public static void main(String[] args) { WeatherStation weatherStation = new WeatherStation(); DisplayDevice display1 = new DisplayDevice("Display 1"); DisplayDevice display2 = new DisplayDevice("Display 2"); weatherStation.registerObserver(display1); weatherStation.registerObserver(display2); weatherStation.setMeasurements(25.5f, 65.2f, 1013.2f); // Output: // Display 1 - Temperature: 25.5 Humidity: 65.2 Pressure: 1013.2 // Display 2 - Temperature: 25.5 Humidity: 65.2 Pressure: 1013.2 weatherStation.removeObserver(display2); weatherStation.setMeasurements(27.8f, 62.8f, 1010.5f); // Output: // Display 1 - Temperature: 27.8 Humidity: 62.8 Pressure: 1010.5 } }

在上面的示例中,我们定义了主题接口 WeatherData 和观察者接口 WeatherObserver,具体主题类 WeatherStation 和具体观察者类 DisplayDevice。通过注册观察者、更新状态和通知观察者的过程,实现了主题和观察者之间的交互。

  • 上一篇: java8教程chm
  • 下一篇: java 水晶报表教程
  • 版权声明


    相关文章:

  • java8教程chm2024-12-08 19:42:03
  • java48集教程2024-12-08 19:42:03
  • 菜鸟教程java离线2024-12-08 19:42:03
  • java教程130讲2024-12-08 19:42:03
  • java安装系统教程2024-12-08 19:42:03
  • java 水晶报表教程2024-12-08 19:42:03
  • java教程小白2024-12-08 19:42:03
  • java专业就业教程2024-12-08 19:42:03
  • java书籍制作教程2024-12-08 19:42:03
  • java返回码教程2024-12-08 19:42:03