发布-订阅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 事件接口
interface Event {}

// 示例事件类型
class MessageEvent implements Event {
private final String message;

public MessageEvent(String message) {
this.message = message;
}

public String getMessage() {
return message;
}
}

// 订阅者接口
interface Subscriber<T extends Event> {
void onEvent(T event);
}

// 事件总线(中心)
class EventBus {
private final Map<Class<? extends Event>, List<Subscriber<? extends Event>>> subscribers = new HashMap<>();

public <T extends Event> void subscribe(Class<T> eventType, Subscriber<T> subscriber) {
subscribers.computeIfAbsent(eventType, k -> new ArrayList<>()).add(subscriber);
}

public <T extends Event> void publish(T event) {
List<Subscriber<? extends Event>> eventSubscribers = subscribers.get(event.getClass());
if (eventSubscribers != null) {
for (Subscriber<? extends Event> sub : eventSubscribers) {
@SuppressWarnings("unchecked")
Subscriber<T> typedSub = (Subscriber<T>) sub;
typedSub.onEvent(event);
}
}
}
}