使用java语言实现一个发布订阅模式
时间: 2023-08-27 10:05:13 浏览: 187
好的,下面是一个简单的Java实现发布订阅模式的示例:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
interface Subscriber {
void onEvent(String eventType, Object data);
}
class Publisher {
private Map<String, List<Subscriber>> subscribers = new HashMap<>();
public void subscribe(String eventType, Subscriber subscriber) {
List<Subscriber> subscriberList = subscribers.getOrDefault(eventType, new ArrayList<>());
subscriberList.add(subscriber);
subscribers.put(eventType, subscriberList);
}
public void unsubscribe(String eventType, Subscriber subscriber) {
List<Subscriber> subscriberList = subscribers.getOrDefault(eventType, new ArrayList<>());
subscriberList.remove(subscriber);
subscribers.put(eventType, subscriberList);
}
public void publish(String eventType, Object data) {
List<Subscriber> subscriberList = subscribers.getOrDefault(eventType, new ArrayList<>());
for (Subscriber subscriber : subscriberList) {
subscriber.onEvent(eventType, data);
}
}
}
class MessageSubscriber implements Subscriber {
private String name;
public MessageSubscriber(String name) {
this.name = name;
}
@Override
public void onEvent(String eventType, Object data) {
System.out.println(name + " received message: " + data);
}
}
public class PubSubDemo {
public static void main(String[] args) {
Publisher publisher = new Publisher();
Subscriber subscriber1 = new MessageSubscriber("Subscriber 1");
Subscriber subscriber2 = new MessageSubscriber("Subscriber 2");
Subscriber subscriber3 = new MessageSubscriber("Subscriber 3");
publisher.subscribe("message", subscriber1);
publisher.subscribe("message", subscriber2);
publisher.subscribe("alert", subscriber3);
publisher.publish("message", "Hello World!");
publisher.publish("alert", "Warning: High CPU usage!");
publisher.unsubscribe("message", subscriber2);
publisher.publish("message", "Goodbye World!");
}
}
```
上述代码实现了一个简单的发布订阅模式,其中 `Publisher` 表示发布者,`Subscriber` 表示订阅者,`MessageSubscriber` 是一个订阅者的实现类,`PubSubDemo` 是一个包含 `main` 方法的示例类。在 `main` 方法中,我们创建一个 `Publisher` 对象,然后创建三个不同的订阅者,并通过 `subscribe` 方法订阅了两种事件类型:`message` 和 `alert`。接着我们通过 `publish` 方法向所有订阅了 `message` 事件类型的订阅者发送了一条消息,然后向所有订阅了 `alert` 事件类型的订阅者发送了一条警告消息。最后,我们通过 `unsubscribe` 方法取消了一个订阅者的订阅。