设计模式之Observer - 观察者模式
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者发布/订阅模型。 在Java中,观察者模式的实现通常涉及到Java的内置接口`java.util.Observer`和`java.util.Observable`。`Observer`接口定义了一个方法`update(Observable o, Object arg)`,当被观察的对象状态改变时,这个方法会被调用。`Observable`类提供了一组方法来管理观察者列表和通知他们状态的变化。 我们来了解观察者模式的基本结构: 1. **主题(Subject)**:也称为被观察者,它是所有被观察的目标的基类或接口,它维护一个观察者列表,并提供添加、删除观察者的方法,以及通知所有观察者状态变化的机制。 2. **观察者(Observer)**:观察者接口,定义了当被观察者状态改变时需要执行的操作。每个具体的观察者实现这个接口,表示它们对状态变化的响应方式。 3. **具体主题(Concrete Subject)**:实现了Subject接口,保存具体的状态,并负责通知观察者状态的变化。 4. **具体观察者(Concrete Observer)**:实现了Observer接口,当接收到被观察者的通知时,会根据新的状态进行相应的处理。 在Java中,我们可以这样实现观察者模式: ```java // 定义一个观察者接口 interface Observer { void update(String message); } // 具体观察者类 class ConcreteObserver implements Observer { @Override public void update(String message) { System.out.println("观察者收到了消息:" + message); } } // 被观察者接口 interface Observable { void addObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(String message); } // 具体被观察者类 class ConcreteObservable implements Observable { private List<Observer> observers = new ArrayList<>(); @Override public void addObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { observers.remove(observer); } @Override public void notifyObservers(String message) { for (Observer observer : observers) { observer.update(message); } } // 业务逻辑,改变状态 public void changeState() { String newState = "状态已改变"; notifyObservers(newState); } } // 测试代码 public class Main { public static void main(String[] args) { ConcreteObservable observable = new ConcreteObservable(); Observer observer1 = new ConcreteObserver(); Observer observer2 = new ConcreteObserver(); observable.addObserver(observer1); observable.addObserver(observer2); observable.changeState(); // 触发状态改变,通知观察者 } } ``` 在这个例子中,`ConcreteObservable`是具体主题,`ConcreteObserver`是具体观察者。当`ConcreteObservable`的状态改变时,它会调用`notifyObservers`方法通知所有的观察者。 标签中的"源码"提示我们关注Java内置实现的源代码。在`java.util.Observable`类中,你可以看到它如何维护观察者列表以及如何通过`setChanged()`和`notifyObservers()`方法通知观察者。`setChanged()`标记对象状态已经改变,而`notifyObservers()`则触发通知过程。此外,`Observable`还允许传递一个参数`Object arg`到`update`方法,以提供更多的上下文信息。 至于"工具"标签,可能是指观察者模式在各种开发工具和框架中的应用。例如,在GUI编程中,视图通常作为观察者监听模型的变化,从而实时更新显示;在事件驱动的系统中,事件处理器可以作为观察者,监听特定事件的发生。 观察者模式是一种强大的设计模式,它使得对象之间的交互更加灵活,解耦了生产者和消费者,使得系统更加模块化。在实际开发中,观察者模式广泛应用于日志记录、用户界面更新、缓存刷新等多种场景。了解并熟练掌握观察者模式,能够帮助开发者构建更加稳定、可扩展的软件系统。
- 1
- 粉丝: 386
- 资源: 6万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助