design-patterns - 独特资源的单例替代方案

标签 design-patterns singleton global-variables

我一遍又一遍地读到,出于各种原因,应该避免使用单例。我想知道如何正确处理类代表唯一系统资源的情况。例如,使用 SDL 的 AudioOutput 类。由于 SDL_OpenAudio 一次只能打开一次,因此拥有超过一个这种类型的对象是没有意义的,而且在我看来,防止意外创建超过一个对象实际上是好的。

只是想知道有经验的程序员对此有何看法,我是否错过了另一种选择?

最佳答案

明智地使用设计模式是一个棘手的问题,需要大量的练习。

我见过很多人使用 Singleton 只是因为它“有点”适合他们需要做的事情。这通常会导致灾难,例如在多线程环境的情况下,或者只是为了隐藏设计缺陷并且稍后需要完整的系统重新设计。

我想说在考虑 Singleton 时你需要考虑一些事情:

  • 我真的只需要一个对象实例吗?我不是想隐藏一些设计缺陷吗?
  • 可以全局访问我的对象有意义吗?

  • 但是我想说不要花太多时间在它上面:它可能并不总是最好的解决方案,但在某些情况下这仍然是可以接受的解决方案,除非您在多线程环境中,否则您会可能很少有问题。这主要是一种设计选择。

    如果你想获得更多关于设计模式的知识,我建议 this book ,这几乎是该主题的引用。

    关于design-patterns - 独特资源的单例替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166860/

    相关文章:

    java - 如何从枚举构造函数中抛出异常?

    ios - 在 Swift 中使用单例循环

    c++ - 静态变量和全局变量在linux上动态库和静态库显示地址不同?

    google-apps-script - 电子表格脚本和脚本库之间的可变范围

    java - Java 中的内部包保护访问修饰符

    design-patterns - 为什么 SqlConnection 和 SqlTransaction 都存在于 SqlCommand 构造函数中?

    c# - .Net 应用程序范围的变量

    opengl - 使用 glut(或 freeglut)编写 OpenGL 时处理全局变量

    c# - MVC中的单一职责原则

    php 设计问题 - Helper 会在这里提供帮助吗?