【发布时间】:2012-11-29 15:17:12
【问题描述】:
我有一个非常简单的游戏引擎。它使用了几个单例(我会列举其中的一些)。
Resource Manager
Render Engine
Events Manager
Factory
etc
这些单例有很多从一个到另一个的调用。我将使用 Events Manager 示例:
- 任何从 Listener 派生的对象都可以添加 itsel 作为某些事件的侦听器,就像
EventsManager->RegisterListener(this, &SomeClass::SomeMethod);一样(事件类型由 SomeMethod 参数推断) - 任何其他对象都可以触发这样的事件
EventsManager->PushEvent(SomeEvent);
经过一些同步后,事件到达所有侦听器。这是单例时 EventsManager 的一个非常简单的用法。
其他单身人士也有类似的行为。我想删除单例,但我的主要问题是我想从“用户的角度”保持代码简单易用,就像现在一样。我阅读了一些这样做的技术,但大多数使类的初始化/使用更加复杂。我知道这个话题在 SO 上被讨论过很多次,但没有一个答案适合我的编程理念——让一切尽可能简单。
我不想对我的类进行复杂的定义/初始化,例如:
SomeClass<EventManager, RenderEngine,...>
或
SomeClass::SomeClass(EventsManager, RenderEngine...)
你能就这个话题给我一些建议吗?
【问题讨论】:
-
为什么要摆脱单例?
-
我在想,与其在命名空间范围内拥有所有这些单例,不如在一个对象中拥有实例(其中通常只有一个,可能用于测试除外)。然后当你让它发挥作用时,考虑更多的分而治之。可能。
-
是的,为什么要删除单例?它们可能是最合适的模式。
-
按照您的理念,我一直认为,如果您想确保应用程序中只有一个对象实例,那么最简单的做法就是创建一个。
-
@giorashc 我对单例的最后一个问题是内存泄漏检测。我覆盖新/删除,我想在“最后”转储未删除的分配内存。你能告诉我在这种环境下什么时候“结束”吗?
标签: c++ oop design-patterns