我知道拥有全局变量或单例类会创建很难测试/管理的案例,而我在代码中使用这些模式的工作已陷入困境,但常常需要交付。
那么在游戏开发中是否存在全局变量或单例实际上有用的情况?
我知道拥有全局变量或单例类会创建很难测试/管理的案例,而我在代码中使用这些模式的工作已陷入困境,但常常需要交付。
那么在游戏开发中是否存在全局变量或单例实际上有用的情况?
Answers:
绝对不是穷举列表,但这里有:
我们在掌上电脑游戏中经常使用“全局单例结构”。PC和游戏机名称往往较少依赖它们。我们将更多地转向事件驱动/消息架构。话虽这么说,PC /控制台标题仍然经常使用中央TextureManager。由于它通常包装单个共享资源(纹理内存),因此对我们来说很有意义。
如果您保持API相对整洁,则在需要时将其重构为单例模式可能不是很困难。
全局变量和单例实现不佳的主要问题是模糊的构造和解构错误。
因此,如果您使用没有这些问题或非常了解指针问题的原语。这样就可以安全地使用它们。
全局变量具有与goto相同的位置,因此不应一概而论,而应谨慎使用。
《Google C ++样式指南》对此有很好的解释。
我倾向于建议使用带有自定义生存期管理的某种DI / IoC容器,而不要使用单例(即使您使用“单实例”生存期管理器)。至少那么很容易换出实现以方便测试。
如果您想要单例的内存节省功能,也许可以尝试使用flyweight设计模式?
http://en.wikipedia.org/wiki/Flyweight_pattern
就上述多线程问题而言,出于某种先见之明,应该很简单地为可能在线程之间共享的资源实现锁定机制。 http://en.wikipedia.org/wiki/Read/write_lock_pattern
哇,这对我来说很有趣,因为我个人从未遇到过单例模式的问题。我当前的项目是Nintendo DS的C ++游戏引擎,并且我将许多硬件访问实用程序(即VRAM Bank,Wifi和两个图形引擎)实现为单例实例,因为它们旨在包装全局C基础库中的函数。
全球人要快得多!因此,它非常适合性能密集型应用程序,例如游戏。
单例是更好的全局,IMO,因此是正确的工具。
谨慎使用!