概念:
观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象之间建立一对多的依赖关系,当一个对象的状态发生变化时,其相关依赖对象会自动收到通知并进行相应处理。
特点:
- 松耦合:主题和观察者之间通过抽象接口进行交互,使得它们可以独立演化而不影响彼此。
- 一对多关系:一个主题可以有多个观察者,并且它们之间没有直接联系。
- 可扩展性:可以随时增加新的观察者或删除现有观察者。
优点:
- 解耦合:将主题与具体观察者解耦,使得它们可以独立地变化和复用。
- 扩展性:易于添加新的观察者以及定义新的事件类型。
- 实时性:实现了实时更新机制,当主题状态改变时能够即刻通知相关观察者。
缺点:
- 过度使用可能导致性能问题和复杂度增加。
- 触发链问题:如果观察者之间有依赖关系,那么通知链可能会导致不可预料的结果。
适用场景:
- 当一个对象的改变需要同时影响其他多个对象时。
- 当系统中存在一些对象之间的联动行为,但又希望它们之间解耦合时。
实现方式
使用自定义接口
主题和观察者都实现相应接口,在主题中维护一个观察者列表,并在状态改变时遍历通知所有观察者。
实现原理:
- 定义一个观察者接口(Observer),其中声明了一个更新方法(update)用于接收主题状态的改变。
- 定义一个主题接口(Subject),其中包括添加观察者、移除观察者和通知观察者等方法。
- 创建具体的主题类(ConcreteSubject),该类维护了一个观察者列表,并在状态改变时遍历通知所有注册的观察者。
- 创建具体的观察者类(ConcreteObserver),该类实现了更新方法,在收到主题通知时进行相应操作。
实现代码:
import java.util.ArrayList;
import java.util.List;
// 观察者接口
interface Observer {
void update(String newState);
}
// 主题接口
inter