核心概念
主题接口:具有状态,维持一个list,其中存放观察者,当状态变化时候通知观察者执行
观察者接口:收到主题的通知后,执行相应的方法
具体主题实现类
具体观察者发实现类
核心思想
主题状态改变,通知所有的监听者
观察者模式的核心思想就是一个主题状态改变时,会通知所有注册的观察者。主题维护一个观察者列表,当主题的状态发生变化时,会遍历观察者列表并调用每个观察者的更新方法,以便观察者能够获取最新的状态信息并执行相应的操作。
class ConcreteSubject implements Subject {
private int state;
private List<Observer> observers = new ArrayList<>();
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(state);
}
}
public void setState(int state) {
this.state = state;
notifyObservers();
}
}
监听者根据主题状态,做出相应行为
观察者的更新方法通常包含一个参数,该参数是主题的状态信息。观察者通过检查这个状态信息,可以根据具体的业务逻辑执行相应的操作。
class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(int state) {
if (state > 5) {
System.out.println(name + " received update and is taking action: High state detected.");
// 执行高状态的操作
} else {
System.out.println(name + " received update and is taking action: Normal state detected.");
// 执行正常状态的操作
}
}
}
观察者模式的优点
松耦合可重用:观察者模式的目的就是让主题和观察者之间的关系更加松散,使得它们可以独立地演进和变化。
分布式事件处理: 观察者模式常被用于实现分布式事件处理系统。主题和观察者可以在不同的系统或模块中,通过事件的方式进行通信,从而支持分布式系统的协作。
事件驱动架构: 观察者模式是事件驱动架构的基础。通过观察者模式,可以构建灵活的事件系统,支持异步事件处理,提高系统的响应性和扩展性。