WAYNETS.ORG

Game and Program

RTS Game

作者:

发表于

Context Polling System Post-Processing Renderer

Event Bus(事件总线)

Event Bus是一种 解耦事件传递机制,用于在不同系统或模块之间广播消息,而不需要它们之间直接引用彼此。

它就像一个公告栏(Bus),任何人都可以在上面贴通知(事件),感兴趣的人可以订阅它,当通知发出时自动收到消息。

优点:

  • 完全解耦:发送者和接收者互不认识。
  • 扩展性强:可以动态添加新监听者。
  • 结构清晰:避免了“神类”或 Manager 太多职责。

缺点:

  • ❌ 隐式依赖,不容易追踪事件触发源。
  • ❌ 容易内存泄漏(忘记取消订阅)。
  • ❌ 不适合高频调用(如每帧事件)。

基于泛型的事件总线(Event Bus)实现模板:

public static class Bus<T> where T : IEvent
{
    public delegate void Event(T args);
    public static event Event OnEvent;

    public static void Raise(T evt) => OnEvent?.Invoke(evt);
}

以事件UnitSpawnEvent为例,当新的Unit被创建,这个事件就会被触发:

(1)

Bus<UnitSpawnEvent>.OnEvent += HandleUnitSpawn;

(2)

Bus<UnitSpawnEvent>.Raise(new UnitSpawnEvent(this));

(3)

Bus<UnitSpawnEvent>.OnEvent -= HandleUnitSpawn;

Read Next:


Leave a comment