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;

Leave a comment