Uni*_*ant 4 singleton design-patterns global-variables
我一遍又一遍地阅读,应该避免因为各种原因使用单身人士.我想知道如何正确处理类表示唯一系统资源的情况.例如,使用SDL的AudioOutput类.由于SDL_OpenAudio一次只能打开一次,因此有多个这种类型的对象没有任何意义,而且在我看来,防止意外制造多于一个对象实际上是好的.
只是想知道经验丰富的程序员对此有何想法,我还缺少另一种选择吗?
Singleton的一个问题是,它的使用大多数情况下都会破坏控制反转原理(或依赖于SOLID的依赖性反转).
Singleton不仅可以防止创建多个对象,还可以从代码中的任何位置公开此对象.这很糟糕,因为如果您决定更改对象的创建/访问方式,则必须更改代码中的所有位置,例如,他们应该通过静态访问它SingletonClass.GetInstance().
此外,当您实施单元测试时,通常需要使用模拟而不是真实对象.在您的情况下,如果您想要对某些模块进行单元测试,并且如果该模块通过实际音频输出访问SingletonClass.GetInstance(),那么使用存根替换真实音频输出将变得非常困难.
另一方面,如果您的模块通过依赖注入获取音频输出对象(例如,作为传递给构造函数的参数),那么在测试时,您可以注入实现相同接口的存根,而不是真正的音频输出对象.
当然,在您注入此类对象的级别上,您可以使用单例来确保一次只有一个实例.重点是底层代码不应该关心可以有多少对象或者如何获取它们 - 它只适用于注入的内容.
因此,作为底线,如果您真的认为需要,可以使用Singleton,但不允许将其作为全局状态进行访问.
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |