Java观察者模式详解:对象行为型模式

5星 · 超过95%的资源 需积分: 9 5 下载量 24 浏览量 更新于2024-07-26 收藏 212KB DOC 举报
"Java观察者模式是面向对象设计模式中的一种行为模式,它定义了一种一对多的关系,允许一个或多个观察者对象监听一个主题对象的状态变化,并在状态改变时自动更新。这种模式常用于实现事件驱动编程和实时数据同步。在Java中,观察者模式的实现通常涉及到`java.util.Observable`类和`java.util.Observer`接口。 在观察者模式的结构中,有四个主要角色: 1. 抽象主题(Subject)角色:这是被观察的对象,它维护一个观察者列表,并提供方法供观察者注册和注销。在Java中,`Observable`类扮演这个角色。 2. 抽象观察者(Observer)角色:定义了所有观察者的通用接口,当主题状态发生变化时,观察者需要执行的更新操作。这个接口在Java中由`Observer`接口提供。 3. 具体主题(ConcreteSubject)角色:实现了抽象主题接口,负责存储实际的数据和状态,并在状态变化时通知观察者。这是具体的被观察者类,继承自`Observable`。 4. 具体观察者(ConcreteObserver)角色:实现了抽象观察者接口,当收到主题状态变化的通知时,会更新自身的状态以保持与主题同步。开发者需要创建此类来实现特定的观察者行为。 以下是一个简单的Java代码示例,展示了如何使用观察者模式: ```java // 定义抽象观察者接口 public interface Observer { void update(); } // 具体观察者类 public class ConcreteObserver implements Observer { @Override public void update() { // 更新自身状态 System.out.println("Observer updated."); } } // 具体主题类 public class ConcreteSubject extends Observable { private String state; public void setState(String state) { this.state = state; setChanged(); // 标记状态已变 notifyObservers(state); // 通知所有观察者 } public String getState() { return state; } } // 使用示例 public class Main { public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); Observer observer = new ConcreteObserver(); // 注册观察者 subject.addObserver(observer); // 改变主题状态并通知观察者 subject.setState("New State"); } } ``` 在这个例子中,`ConcreteSubject`类扩展了`Observable`,并提供了改变状态的方法。当状态改变时,通过`setChanged()`和`notifyObservers()`方法通知所有注册的观察者。`ConcreteObserver`实现了`Observer`接口,定义了`update()`方法以响应主题状态的变化。 观察者模式的应用非常广泛,例如在GUI编程中,视图组件作为观察者监听模型的改变,从而实时更新界面;在事件驱动系统中,事件源作为主题,事件处理器作为观察者。通过这种方式,观察者模式实现了松耦合,使得主题对象和观察者对象可以独立地发展,无需互相了解对方的实现细节。"