观察者模式(Observer Pattern)是一种行为型模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并进行相应处理。
观察者模式的主要角色如下:
- 主题(Subject):也称为被观察者或可观察者,它是具有状态的对象,并维护着一个观察者列表。
- 观察者(Observer):观察者是接收主题通知的对象。
观察者模式的实现如下:
// 主题
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
// 观察者
public interface Observer {
void update();
}
// 具体观察者
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("观察者收到通知");
}
}
public class Main {
public static void main(String[] args) {
// 创建主题
Subject subject = new Subject();
// 创建观察者
Observer observer1 = new ConcreteObserver();
Observer observer2 = new ConcreteObserver();
// 将观察者添加到主题中
subject.addObserver(observer1);
subject.addObserver(observer2);
// 改变主题的状态
subject.notifyObservers();
}
}
输出:
观察者收到通知
观察者收到通知
观察者模式的优点如下:
- 解耦了主题和观察者,使它们可以独立变化。
- 提高了系统的灵活性和扩展性。
观察者模式的应用场景如下:
- 在系统中存在多个对象相互依赖时。
- 需要动态地添加或删除观察者时。
- 需要提高系统的灵活性和扩展性时。
观察者模式的注意事项如下:
- 主题和观察者之间应该采用弱引用,以避免内存泄漏。
- 主题应该提供一个清除观察者的方法,以便在不需要观察者时可以进行清除。