我正在制作一个小型 rpg 游戏,并为对象之间的事件驱动通信实现了一种观察者设计模式。我有一个 EventManager 注册侦听器、接受新事件和调度事件。问题是每个需要发送或接收事件的对象都需要一个 EventManager 实例来调用 addEvent() 或 register()。由于我程序中的几乎每个对象都将使用该系统(以减少耦合并避免数据修改错误),因此我需要一种访问它的好方法。
目前,我正在将引用显式传递给它们的构造函数和方法中的大量对象,但随着规模的增加,这变得越来越混乱。特别是因为我开始在角色等对象中需要它,而角色不是在游戏中构建的;它们是从数据文件中反序列化的。
我知道全局变量通常是不好的设计,但这些是我可以看到的选项,所有这些都受到批评:
a) 使 EventManager 中的每个字段和方法都是静态的
b) 采用单例设计
c) 制作一个公共静态 EventManager
有任何想法吗?谢谢