0

我正在制作一个小型 rpg 游戏,并为对象之间的事件驱动通信实现了一种观察者设计模式。我有一个 EventManager 注册侦听器、接受新事件和调度事件。问题是每个需要发送或接收事件的对象都需要一个 EventManager 实例来调用 addEvent() 或 register()。由于我程序中的几乎每个对象都将使用该系统(以减少耦合并避免数据修改错误),因此我需要一种访问它的好方法。

目前,我正在将引用显式传递给它们的构造函数和方法中的大量对象,但随着规模的增加,这变得越来越混乱。特别是因为我开始在角色等对象中需要它,而角色不是在游戏中构建的;它们是从数据文件中反序列化的。

我知道全局变量通常是不好的设计,但这些是我可以看到的选项,所有这些都受到批评:

a) 使 EventManager 中的每个字段和方法都是静态的

b) 采用单例设计

c) 制作一个公共静态 EventManager

有任何想法吗?谢谢

4

3 回答 3

2

实际上,您目前正在做的是最佳实践。依赖注入很重要,不仅对于模块化,而且对于测试。您可以通过使用工厂来减轻传递参数的负担。

如果您要使用全局变量(您不应该这样做),那么在 Java 中执行此操作的方法是某个类的静态公共字段。

于 2012-08-09T00:20:11.100 回答
0

我个人会推荐静态。静态和单例之间的巨大差异。我是注入的粉丝,但不是这样一个接收依赖项的类可以传递它。只是我自己的想法。

于 2012-08-09T01:29:01.850 回答
0

依赖注入框架 ( Google Guice ) 提供了一种跨大型应用程序管理引用的好方法。除了允许您更改应用程序(例如,您想要 2 个事件管理器或每个玩家一个) 仅更新相关的导出模块。

它还允许通过将类与其依赖项解耦来更轻松地进行单元测试(如果您有一个单例事件管理器,那么使用模拟框架来测试每个类而不必构建整个对象层次结构将更加困难。

于 2012-08-09T01:52:52.667 回答