实现Java观察者模式多个观察者耗时
一、流程概述
在实现Java观察者模式时,我们通常需要定义主题和观察者两个接口,然后让具体的主题类实现主题接口,观察者类实现观察者接口,并在主题类中维护一个观察者列表,在主题状态发生变化时通知所有观察者。下面是具体的实现步骤:
二、实现步骤
步骤 | 操作 |
---|---|
1 | 定义主题接口 |
2 | 定义观察者接口 |
3 | 创建具体的主题类 |
4 | 创建具体的观察者类 |
5 | 在主题类中维护一个观察者列表 |
6 | 主题状态发生变化时通知所有观察者 |
三、具体操作
1. 定义主题接口
// 主题接口
public interface Subject {
void registerObserver(Observer observer); //注册观察者
void removeObserver(Observer observer); //移除观察者
void notifyObservers(); //通知观察者
}
2. 定义观察者接口
// 观察者接口
public interface Observer {
void update(); //观察者更新方法
}
3. 创建具体的主题类
// 具体主题类
public class ConcreteSubject implements Subject {
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();
}
}
}
4. 创建具体的观察者类
// 具体观察者类
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("Observer is updated!");
}
}
5. 在主题类中维护一个观察者列表
// 具体主题类
public class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
// 省略注册、移除观察者等方法
public void doSomething() {
// 主题状态发生变化时通知观察者
notifyObservers();
}
}
6. 主题状态发生变化时通知所有观察者
// 使用示例
public class Main {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver();
Observer observer2 = new ConcreteObserver();
subject.registerObserver(observer1);
subject.registerObserver(observer2);
// 主题状态发生变化
subject.doSomething();
}
}
四、状态图
stateDiagram
[*] --> HasObservers
HasObservers --> [*]
HasObservers --> Updating
Updating --> HasObservers
通过以上步骤,你可以成功实现Java观察者模式多个观察者耗时的功能。希望对你有所帮助!