java flow实现观察者模式示例
时间: 2023-11-29 20:57:23 浏览: 144
观察者模式是一种设计模式,用于对象间的一对多依赖关系。当一个对象的状态发生变化时,它的所有依赖对象都会收到通知并自动更新。在Java中,观察者模式可以通过Flow API来实现。
下面是一个简单的示例,演示如何使用Flow API实现观察者模式:
```
import java.util.concurrent.Flow.*;
public class ObserverPatternExample {
public static void main(String[] args) {
// 创建主题
MyTopic topic = new MyTopic();
// 创建观察者
Observer observer1 = new MyTopicSubscriber("Observer 1");
Observer observer2 = new MyTopicSubscriber("Observer 2");
Observer observer3 = new MyTopicSubscriber("Observer 3");
// 注册观察者
topic.addObserver(observer1);
topic.addObserver(observer2);
topic.addObserver(observer3);
// 发布消息
topic.postMessage("Hello, World!");
}
}
// 定义主题
class MyTopic implements Publisher<String> {
private List<Subscriber<? super String>> subscribers = new ArrayList<>();
@Override
public void subscribe(Subscriber<? super String> subscriber) {
subscribers.add(subscriber);
}
@Override
public void publish(String message) {
subscribers.forEach(subscriber -> subscriber.onNext(message));
}
public void addSubscriber(Subscriber<? super String> subscriber) {
subscribers.add(subscriber);
}
public void removeSubscriber(Subscriber<? super String> subscriber) {
subscribers.remove(subscriber);
}
}
// 定义观察者
class MyTopicSubscriber implements Observer<String> {
private String name;
public MyTopicSubscriber(String name) {
this.name = name;
}
@Override
public void onSubscribe(Subscription subscription) {
subscription.request(1);
}
@Override
public void onNext(String message) {
System.out.println(name + " received message: " + message);
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
System.out.println(name + " completed");
}
}
```
在这个示例中,我们首先创建了一个`MyTopic`类来实现主题。它实现了`Publisher`接口,并提供了`subscribe`和`publish`方法来管理订阅者和发布消息。`MyTopicSubscriber`类实现了`Observer`接口,并提供了相应的方法来处理订阅和接收消息。最后,在`main`方法中,我们创建了三个观察者并将它们注册到主题中。当主题发布消息时,所有观察者都会收到通知并执行相应的操作。
需要注意的是,这个示例只是一种基本的实现方式,实际上,观察者模式可以有很多不同的变体和扩展。
阅读全文