我一直反复阅读,发现有很多原因要避免使用单例模式。我想知道如何正确处理一个类代表唯一系统资源的情况。例如,使用SDL的AudioOutput类。由于SDL_OpenAudio一次只能打开一次,拥有多个此类型的对象毫无意义,我认为防止意外创建多个对象实际上是好的。
只是想知道经验丰富的程序员对此有什么看法,我是否错过了其他选项?
我一直反复阅读,发现有很多原因要避免使用单例模式。我想知道如何正确处理一个类代表唯一系统资源的情况。例如,使用SDL的AudioOutput类。由于SDL_OpenAudio一次只能打开一次,拥有多个此类型的对象毫无意义,我认为防止意外创建多个对象实际上是好的。
只是想知道经验丰富的程序员对此有什么看法,我是否错过了其他选项?
SingletonClass.GetInstance()
访问它的代码位置。SingletonClass.GetInstance()
访问了真实的音频输出,那么用一个存根来替换真实的音频输出将变得非常困难。明智地使用设计模式是一个棘手的问题,需要大量的实践。
我看到很多人仅仅因为Singleton“有点”符合他们需要做的事情就使用它。这通常会导致灾难,例如在多线程环境下,或者只是因为它意味着隐藏了设计缺陷并且后来需要完全重构系统。
我认为,在考虑Singleton时,您需要思考几件事情:
但我想说不要花太多时间:它可能不总是最好的解决方案,但在某些情况下仍然是可接受的解决方案,除非您处于多线程环境中,否则您可能很少遇到问题。这主要是一种设计选择。
如果您想获得更多有关设计模式的知识,我建议阅读this book,这几乎是该主题的参考书。